8 days agoMake Interchange reopen debug.log/STDERR when receiving HUP signal master github/master
David Christensen [Mon, 9 Jul 2018 19:15:25 +0000]
Make Interchange reopen debug.log/STDERR when receiving HUP signal

Co-authored-by: David Christensen <david@endpoint.com>
Co-authored-by: Jon Jensen <jon@endpoint.com>

8 days agoWhack pointless historical code
David Christensen [Mon, 11 Jun 2018 18:10:58 +0000]
Whack pointless historical code

3 weeks agoFix timecard_stamp() to support a passed timestamp.
Peter Ajamian [Thu, 21 Jun 2018 15:28:44 +0000]
Fix timecard_stamp() to support a passed timestamp.

timecard_stamp() was originally designed and documented to support the ability
to pass a timestamp as a second arg, but due to a typo it never has.  This
commit fixes that issue.

2 months agoConvert README to Markdown for nice GitHub viewing
Jon Jensen [Tue, 15 May 2018 04:56:31 +0000]
Convert README to Markdown for nice GitHub viewing

As suggested in GitHub issue #99.

Along the way, update some things that needed it.

2 months agoBump Vend::Util version
Jon Jensen [Tue, 15 May 2018 04:26:10 +0000]
Bump Vend::Util version

2 months agoSupport recipient addresses in CC and BCC when using Net::SMTP
Andrew Baerg [Wed, 9 May 2018 19:21:04 +0000]
Support recipient addresses in CC and BCC when using Net::SMTP

2 months agoRemove non-header from BounceReferrals HTTP response headers
Jon Jensen [Tue, 1 May 2018 16:56:01 +0000]
Remove non-header from BounceReferrals HTTP response headers

This invalid extra quasi-header has been there from the beginning of
this feature, but recent versions of Apache surfaced it when they started
throwing a 500 error when seeing a non-header in the header data.

3 months agoFix broken random password number range; consistently make random instead of using...
Jon Jensen [Sat, 7 Apr 2018 03:40:08 +0000]
Fix broken random password number range; consistently make random instead of using zip or phone

It's gross to have this logic duplicated, but fixing that is a task for
another day.

3 months agoRemove MySQL userdb.password NOT NULL constraint to match Postgres
Jon Jensen [Sat, 7 Apr 2018 00:18:42 +0000]
Remove MySQL userdb.password NOT NULL constraint to match Postgres

3 months agoNewer MySQL versions need ISO timestamp, just like Postgres does
Jon Jensen [Sat, 7 Apr 2018 00:12:01 +0000]
Newer MySQL versions need ISO timestamp, just like Postgres does

Tested with Oracle's distribution of MySQL 5.7.

3 months agoRemove invalid date default that doesn't work with more strict MySQL 5.7
Jon Jensen [Fri, 6 Apr 2018 22:13:16 +0000]
Remove invalid date default that doesn't work with more strict MySQL 5.7

3 months agoFix bug in &Vend::Data::update_data
Jon Jensen [Tue, 3 Apr 2018 20:56:07 +0000]
Fix bug in &Vend::Data::update_data

I inadvertently introduced this bug in commit fa639368 while optimizing
a loop. The arrayref passed to set_slice is, in some cases, apparently
mutated somewhere down the line, though it worked fine in my tests.

Found by Gert van der Spoel <gert@3edge.com>. Thanks, Gert!

3 months agoRemove debugging message from metadata help
Jon Jensen [Thu, 22 Mar 2018 22:21:26 +0000]
Remove debugging message from metadata help

3 months agoadd better error handling/messaging when no access to database in Safe
Andrew Baerg [Tue, 13 Mar 2018 03:49:44 +0000]
add better error handling/messaging when no access to database in Safe

When a db/table has not been pre-opened before attempting to access it in the Safe container, you would usually get a message in the error.log "Can't locate object method open_table via package Vend::Table::DBI"

This commit introduces a more relevant error message along with pointers to help fix the error.

See http://www.icdevgroup.org/pipermail/interchange-users/2018-March/055798.html

3 months agoMerge PR #87 https://github.com/interchange/interchange/pull/87
Jon Jensen [Thu, 22 Mar 2018 15:20:27 +0000]
Merge PR #87 https://github.com/interchange/interchange/pull/87

4 months agoMerge pull request #109 from pullingshots/master
David Christensen [Sun, 4 Mar 2018 17:02:14 +0000]
Merge pull request #109 from pullingshots/master

FIX: exclude canceled orders from reports

4 months agoFIX: exclude canceled orders from reports
Andrew Baerg [Sun, 4 Mar 2018 06:09:33 +0000]
FIX: exclude canceled orders from reports

4 months agoFix table editor composite key problems, both creating new and editing existing rows
Jon Jensen [Thu, 1 Mar 2018 03:12:41 +0000]
Fix table editor composite key problems, both creating new and editing existing rows

Also refactor some code along the way.

4 months agoSimplify some code (no functional change)
Jon Jensen [Thu, 1 Mar 2018 03:10:20 +0000]
Simplify some code (no functional change)

4 months agoFix typo
Jon Jensen [Thu, 1 Mar 2018 03:06:31 +0000]
Fix typo

4 months agoImprove some logging
Jon Jensen [Thu, 22 Feb 2018 05:49:51 +0000]
Improve some logging

4 months agoAdjust MySQL key lengths to 191 characters
Josh Lavin [Sat, 17 Feb 2018 00:12:57 +0000]
Adjust MySQL key lengths to 191 characters

- since default encoding is utf8mb4:
    ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
- the max index prefix length is 767 bytes
- utf8mb4 max character length is 4 bytes, so 4*191 = 764
- per: https://stackoverflow.com/a/31474509

6 months agoX-Accel-Expires: Might as well use sensible shorthand!
Jon Jensen [Tue, 16 Jan 2018 23:45:49 +0000]
X-Accel-Expires: Might as well use sensible shorthand!

6 months agoAdd x_accel_expires pragma to set X-Accel-Expires header
Jon Jensen [Tue, 16 Jan 2018 23:39:58 +0000]
Add x_accel_expires pragma to set X-Accel-Expires header

This allows us to have an nginx proxy cache responses for a different
length of time than the end client will based on the Cache-Control
header. For details see:


6 months agoGatewayLog adjustments
Mark Johnson [Sat, 6 Jan 2018 19:08:03 +0000]
GatewayLog adjustments

* Add fallback to session ID in PayflowPro

* Allow arbitrary attributes to be added to the Vend::Payment::GatewayLog

* Pull email field in PaypalExpress directly from $Values; in testing,
  $actual and $opt->{actual} were undefined.

* Field modifications for gateway log

  + Remove order_md5

  + Add amount, host_ip, username

  + Create cart_md5 that hashes $Vend::Items if it has any items.
    Otherwise, left blank.

6 months agoPrevent bug when using scalar as ARRAY ref
Josh Lavin [Fri, 5 Jan 2018 16:34:25 +0000]
Prevent bug when using scalar as ARRAY ref

- resulting in error: (Can't use string ("snip") as an ARRAY ref while
  "strict refs" in use at interchange/lib/Vend/Scan.pm line 353.

7 months agoAlso look in the next-highest directory when detecting VCS; add SVN
David Christensen [Thu, 7 Dec 2017 17:05:13 +0000]
Also look in the next-highest directory when detecting VCS; add SVN

7 months agoMove version-detecting code earlier in Makefile.PL when stamping
David Christensen [Fri, 17 Nov 2017 23:25:17 +0000]
Move version-detecting code earlier in Makefile.PL when stamping

This fixed an issue with not properly stamping when generating via `perl Makefile.PL nocopy`

Reported-by: Josh Lavin <jlavin@endpoint.com>

8 months agoAdd GatewayLog docs into WHATSNEW
David Christensen [Tue, 14 Nov 2017 22:17:04 +0000]
Add GatewayLog docs into WHATSNEW

8 months agoFix non-deterministic UTF8 handling with PostgreSQL database
David Christensen [Tue, 14 Nov 2017 20:41:09 +0000]
Fix non-deterministic UTF8 handling with PostgreSQL database

If using PostgreSQL and versions of DBD::Pg >= 3, code will behave differently if no value is set in
config for DatabaseDefault PG_ENABLE_UTF8.  This would affect installations which were even opting
out of all UTF-8 support in Interchange by using the MINIVEND_DISABLE_UTF8 environment variable.

This happened because the default UTF-8 handling for DBD::Pg as of 3.0 turned into automatically
decoding UTF-8 data as perl scalarsm so catalogs/stacks which were now using a new version of
DBD::Pg could run into unexpected behavior (at the very least, increased parsing time due to using
unicode-aware regexes under-the-hook).

Specify the default to be off to match the existing state before this module; in all cases, you have
to opt in to UTF-8 specific IC, so no reason to change this here.

Reviewed-by: Mark Johnson <mark@endpoint.com>

8 months agoFix unintentionally short local scoping
David Christensen [Mon, 13 Nov 2017 21:34:23 +0000]
Fix unintentionally short local scoping

8 months agoAdd gateway_log support to Braintree
Mark Johnson [Mon, 13 Nov 2017 15:44:53 +0000]
Add gateway_log support to Braintree

8 months agoPaypalExpress gateway logging bugfixes
Mark Johnson [Sun, 5 Nov 2017 22:30:13 +0000]
PaypalExpress gateway logging bugfixes

* Syntax error

* Structure of response may change on certain errors, causing deep
  hash references to produce a strict error.

8 months agoClean up trailing spaces and update copyright
Mark Johnson [Fri, 3 Nov 2017 22:14:18 +0000]
Clean up trailing spaces and update copyright

8 months agoMove gateway_log DB definitions into strap
Mark Johnson [Fri, 3 Nov 2017 21:52:51 +0000]
Move gateway_log DB definitions into strap

8 months agoGatewayLog module improvements
Mark Johnson [Wed, 8 Jan 2014 03:11:27 +0000]
GatewayLog module improvements

* Switch hash tests from ref() to UNIVSERAL::isa() to keep
  blessed hashes from producing false negatives.

* Move major failure log writes from debug to global error.

* Modified DESTROY to call log_it() via eval {} to quiet
  any impact of a failed call on parent code and ensure that
  any unexpected failure is logged to the global error log.

8 months agoFix glitch setting result_code to database.
Mark Johnson [Sat, 9 Jan 2010 20:34:27 +0000]
Fix glitch setting result_code to database.

Another spot where 0 caused trouble.

8 months agoFix glitch on result_code map test.
Mark Johnson [Sat, 9 Jan 2010 20:16:52 +0000]
Fix glitch on result_code map test.

0 is a valid and expected response. Change test from perly true
to length.

8 months agoIntegrate gateway logging to Vend::Payment::CyberSource
Mark Johnson [Sat, 9 Jan 2010 19:49:10 +0000]
Integrate gateway logging to Vend::Payment::CyberSource

8 months agoAdded new Source option.
Mark Johnson [Fri, 18 Dec 2009 04:25:22 +0000]
Added new Source option.

* New Source option to GatewayLog, accessed via source(), intended to set
  into the request_source field. Default sets to `hostname -s`.

* Replaced hard-coded set of request_field value from gateway modules with
  value returned from source().

* Refactored constructor to call out to init() sub for setting params passed
  in appropriately.

* Adjusted POD in GatewayLog module.

8 months agoAdding stubs for debugging calls.
Mark Johnson [Fri, 18 Dec 2009 03:28:00 +0000]
Adding stubs for debugging calls.

8 months agoAdd gateway_log to PaypalExpress.pm
Mark Johnson [Tue, 29 Sep 2009 19:45:34 +0000]
Add gateway_log to PaypalExpress.pm

8 months agoAdd gateway_log to AuthorizeNet.pm
Mark Johnson [Tue, 8 Sep 2009 17:34:02 +0000]
Add gateway_log to AuthorizeNet.pm

* Expanded out gateway_log fields to include new Authnet-specific
  return values.

* Migrated chunk of log_it() code that would clearly be exactly
  duplicated between implementations into a new write() sub that
  actually updates the database and logs any errors that occur.

8 months agoVend::Payment::GatewayLog
Mark Johnson [Tue, 8 Sep 2009 02:25:21 +0000]

* New module facilitates adding logging support for all
  transactions through any of the standard gateway modules.

* Introduce logging support to Vend::Payment::PayflowPro.

* Fully sever database connections in Vend::Payment when
  global timeout is invoked. Code operating in production
  proved to behave unpredictably when parent and child shared
  the same database server.

* Add gateway_log table to standard in expected format for each
  DBI database type.

* Adjusted Vend::Table::DBI to support SQLite's AUTOINCREMENT
  in parallel to same support of MySQL's feature.

8 months agoAdd back in commit counter, some cleanup/logic documentation
David Christensen [Fri, 3 Nov 2017 19:11:43 +0000]
Add back in commit counter, some cleanup/logic documentation

8 months agoWhack strap's admin override login page, now redundant
David Christensen [Fri, 3 Nov 2017 18:16:57 +0000]
Whack strap's admin override login page, now redundant

8 months agoAdd COMPANY var to admin page title
Josh Lavin [Fri, 3 Nov 2017 18:12:26 +0000]
Add COMPANY var to admin page title

- helps identify various IC sites in browser tabs, also for password
  managers that rely on page title for auto-fill.

8 months agoRemove file from MANIFEST
David Christensen [Fri, 3 Nov 2017 17:44:39 +0000]
Remove file from MANIFEST

8 months agoRemove unneeded strap merge_meta admin page (which had also had an error)
David Christensen [Fri, 3 Nov 2017 17:23:31 +0000]
Remove unneeded strap merge_meta admin page (which had also had an error)

8 months agoMake get_dist_version() smarter about which future version numbers might be
David Christensen [Fri, 3 Nov 2017 16:47:19 +0000]
Make get_dist_version() smarter about which future version numbers might be

8 months agoVend::Payment::Braintree payment module
Mark Johnson [Fri, 3 Nov 2017 16:46:59 +0000]
Vend::Payment::Braintree payment module

Provides Interchange payment module to wrap Net::Braintree CPAN module
suite for supporting modern Braintree Perl implementation.

See POD for documentation.

8 months agoUpdate get_dist_version() to consider any post-tag commits as being on devel branch
David Christensen [Fri, 3 Nov 2017 15:49:35 +0000]
Update get_dist_version() to consider any post-tag commits as being on devel branch

8 months agoUse calculated version from Makefile.PL instead of interchange.PL
David Christensen [Fri, 3 Nov 2017 15:18:23 +0000]
Use calculated version from Makefile.PL instead of interchange.PL

8 months agoNormalize the version returned by the get_dist_version()
David Christensen [Fri, 3 Nov 2017 15:17:31 +0000]
Normalize the version returned by the get_dist_version()

8 months agoStrap version of Admin create-customer page
Josh Lavin [Fri, 3 Nov 2017 14:46:53 +0000]
Strap version of Admin create-customer page

which only redirects viewers to the front-end of the website, since the
original create-customer page is broken for usernick and email-as-login.

8 months agoMake the distribution name also use the computed version
David Christensen [Fri, 3 Nov 2017 13:40:52 +0000]
Make the distribution name also use the computed version

8 months agoMove version detection to its own routine
David Christensen [Fri, 3 Nov 2017 13:40:34 +0000]
Move version detection to its own routine

8 months agoFix unqualified relative include with removal of '.' from $PERL5LIB
David Christensen [Thu, 2 Nov 2017 20:52:54 +0000]
Fix unqualified relative include with removal of '.' from $PERL5LIB

8 months agoWhitespace cleanup
David Christensen [Thu, 2 Nov 2017 20:50:59 +0000]
Whitespace cleanup


8 months agoMake Makefile.PL die a hero's death if it can't chdir() to RealBin
David Christensen [Thu, 2 Nov 2017 20:44:40 +0000]
Make Makefile.PL die a hero's death if it can't chdir() to RealBin

8 months agorename .ic-version to _ic_version for style consistency
David Christensen [Thu, 2 Nov 2017 20:42:51 +0000]
rename .ic-version to _ic_version for style consistency

8 months agoCleanup .ic-version on `make clean`
David Christensen [Thu, 2 Nov 2017 20:14:58 +0000]
Cleanup .ic-version on `make clean`

8 months agoSelectively display online_check fields, for AuthNet or not
Josh Lavin [Thu, 2 Nov 2017 20:07:50 +0000]
Selectively display online_check fields, for AuthNet or not

8 months agoAdd feature to tag/use the current development version for `make tardist`
David Christensen [Thu, 2 Nov 2017 20:05:29 +0000]
Add feature to tag/use the current development version for `make tardist`

8 months agoUse interpolated VERSION in various display pieces
David Christensen [Thu, 2 Nov 2017 19:23:13 +0000]
Use interpolated VERSION in various display pieces

8 months agoTeach Makefile.PL about where to get VERSION from
David Christensen [Thu, 2 Nov 2017 19:22:46 +0000]
Teach Makefile.PL about where to get VERSION from

8 months agoAdjust relocate.pl to optionally remove the commented indicator line
David Christensen [Thu, 2 Nov 2017 17:06:34 +0000]
Adjust relocate.pl to optionally remove the commented indicator line

8 months agoRemove CVS $Revision$ tags
Jon Jensen [Thu, 2 Nov 2017 15:53:56 +0000]
Remove CVS $Revision$ tags

8 months agoMake transactions.update_date PREFER_NULL
Jon Jensen [Thu, 2 Nov 2017 05:51:40 +0000]
Make transactions.update_date PREFER_NULL

Otherwise order editing in the admin fails.

Also sync the transactions indexes between the 3 database types.

8 months agoAllow userdb.usernick to be NULL
Jon Jensen [Thu, 2 Nov 2017 05:41:05 +0000]
Allow userdb.usernick to be NULL

Otherwise guest checkout doesn't work.

8 months agoMake userdb.mod_time NULL instead of invalid date '0000-00-00 00:00:00'
Jon Jensen [Thu, 2 Nov 2017 01:42:28 +0000]
Make userdb.mod_time NULL instead of invalid date '0000-00-00 00:00:00'

PostgreSQL doesn't tolerate the invalid date.

8 months agoRemove redundant failure check (Getopt::Std doesn't set $@)
Jon Jensen [Thu, 2 Nov 2017 01:16:42 +0000]
Remove redundant failure check (Getopt::Std doesn't set $@)

8 months agoClear or don't check $@ in cases where eval is not called
Jon Jensen [Thu, 2 Nov 2017 01:15:24 +0000]
Clear or don't check $@ in cases where eval is not called

The contents of $@ are unknown if eval isn't run, so we can't rely on it
unless we set it ourselves.

8 months agoUse get_hash error API instead of $@ at a distance
Jon Jensen [Thu, 2 Nov 2017 01:12:25 +0000]
Use get_hash error API instead of $@ at a distance

8 months agoReorder and/or cache $@ to prevent accidental alteration before it is used
Jon Jensen [Thu, 2 Nov 2017 01:10:39 +0000]
Reorder and/or cache $@ to prevent accidental alteration before it is used

It is easy to lose $@ in another function call that may itself have an
eval, leading to missing or wrong errors being reported.

Some of this is fixing what can be real problems, and some is for
prevention, to reduce the chance of future changes breaking things.

8 months agoExplicitly set $@ for cases where set_field() doesn't set $@
Jon Jensen [Thu, 2 Nov 2017 01:04:40 +0000]
Explicitly set $@ for cases where set_field() doesn't set $@

8 months agoRemove bogus usage of $@, which File::Copy doesn't set on error
Jon Jensen [Sat, 22 Aug 2009 23:21:47 +0000]
Remove bogus usage of $@, which File::Copy doesn't set on error

8 months agoCorrect printf arguments in error message
Jon Jensen [Thu, 2 Nov 2017 01:02:15 +0000]
Correct printf arguments in error message

Before the fix this unintentionally printed $@ twice.

8 months agoUse $db->errstr instead of not necessarily set $@ to get error messages
Jon Jensen [Thu, 2 Nov 2017 01:01:19 +0000]
Use $db->errstr instead of not necessarily set $@ to get error messages

8 months agoRemove overcomplicated abort when running on Windows
Jon Jensen [Thu, 2 Nov 2017 00:58:10 +0000]
Remove overcomplicated abort when running on Windows

Strawberry Perl, for example, can use CPAN. Most of Interchange probably
doesn't work on Windows anymore, but there's no reason to bail on it here.

8 months agoTag import-fields: make error handling more robust
Jon Jensen [Thu, 2 Nov 2017 00:56:30 +0000]
Tag import-fields: make error handling more robust

Some database types' set_slice do not eval, and thus do not reliably
set $@ so we should clear it first.

Include $@ if it is set. This is still messy, because an unrelated eval
in set_slice or something it calls could leave a bogus error, but without
rewriting every set_slice completely, this is the best we can do.

The set_slice method returns undef on failure or a new key on success,
so check for that instead.

8 months agoSync MANIFEST
Jon Jensen [Wed, 1 Nov 2017 23:00:57 +0000]

8 months agoRemove remaining CVS Id tags
Jon Jensen [Wed, 1 Nov 2017 22:57:45 +0000]
Remove remaining CVS Id tags

These are actively misleading now, after 8 1/2 years of using Git
when the tags do not get updated.

Most of these were automatically removed with:

perl -pi -0777 -e 's/\n[ \t]*#[ \t]*\n[ \t]*#[ \t]*\$Id[^\n]+//' `git grep -l '\$Id' code lib scripts`

and the rest were done manually.

8 months agoEscape regex literal .
Jon Jensen [Wed, 1 Nov 2017 22:39:48 +0000]
Escape regex literal .

8 months agoRemove defunct payment gateways
David Christensen [Wed, 1 Nov 2017 20:57:51 +0000]
Remove defunct payment gateways

8 months agoWHATSNEW for 5.12
David Christensen [Tue, 31 Oct 2017 16:57:08 +0000]
WHATSNEW for 5.12

8 months agoUpdate PaypalExpress module, by Lyn St George
Josh Lavin [Wed, 1 Nov 2017 16:38:12 +0000]
Update PaypalExpress module, by Lyn St George

version 1.1.0 -> 1.1.6

8 months agoUpdate WHATSNEW structure
David Christensen [Fri, 27 Oct 2017 16:13:19 +0000]
Update WHATSNEW structure

8 months agoUpdate MANIFEST.SKIP
David Christensen [Fri, 27 Oct 2017 16:10:25 +0000]

8 months agoUpdate Copyright dates and Version Numbers
David Christensen [Fri, 27 Oct 2017 16:04:35 +0000]
Update Copyright dates and Version Numbers

8 months agoChange deprecated POSIX::tmpnam to File::Temp versions
David Christensen [Tue, 24 Oct 2017 22:04:35 +0000]
Change deprecated POSIX::tmpnam to File::Temp versions

8 months agoResolve shipping tag Safe issue in perl block
Josh Lavin [Tue, 24 Oct 2017 16:29:22 +0000]
Resolve shipping tag Safe issue in perl block

- if $Tag->shipping() is called from a catalog-level [perl] block, it
  would fail with thrown error of: 'eval "string"' trapped by
  operation mask
- if you are already in a Safe container, then don't start _another_ one
  with `reval`

8 months agoEscape more left braces
Josh Lavin [Tue, 24 Oct 2017 16:27:09 +0000]
Escape more left braces

unescaped is deprecated in Perl 5.26, fatal in 5.30

10 months agoRevert "Correct logic of DisplayErrors"
David Christensen [Mon, 11 Sep 2017 21:45:19 +0000]
Revert "Correct logic of DisplayErrors"

This reverts commit 096f9b97470c0106594573dda4114e5adf25e81c.

10 months agoCorrect logic of DisplayErrors
David Christensen [Fri, 8 Sep 2017 22:30:23 +0000]
Correct logic of DisplayErrors

Most directives (and other places with this specific directive) use 'or' logic to allow you to
define directives in either `interchange.cfg` or `catalog.cfg` to enable a default-off behavior at
either the Interchange server level or at the level of a specific catalog.

As originally coded, the DisplayErrors directive would have only worked when *both*
`interchange.cfg` and `catalog.cfg` had this enabled.

Change this so it shows up when either the current catalog or the global config has this set.

Since the old default was 'no', someone intended this information to be output, so this is the
correct behavior, considering that I only fixed the output of this message in the previous commit.

10 months agoFix unintended error leakage not obeying DisplayErrors
David Christensen [Fri, 8 Sep 2017 22:27:56 +0000]
Fix unintended error leakage not obeying DisplayErrors

Reported-by: Greg Davidson <gdavidson@endpoint.com>

11 months agoAnother fix for @INC
Josh Lavin [Sat, 12 Aug 2017 00:42:03 +0000]
Another fix for @INC

- Perl 5.26 was broken

11 months agote: Improve extended hash handling, ignore character sets, modernize a bit
Jon Jensen [Thu, 10 Aug 2017 17:55:14 +0000]
te: Improve extended hash handling, ignore character sets, modernize a bit

Added option -t to suppress tabs for empty final columns.

Added option -h to suppress output of an empty extended attribute hash {}.

Started sorting extended attributes in stringified hashes to have a
stable order, since newer Perl hash key ordering is random per run.

Made agnostic about character set encoding.

Use Safe reval instead of unsafe eval on extended attribute serialized hashes
to avoid running possibly untrusted code.

Updated code to modernize some Perl conventions: 3-arg open, lexical
filehandles, etc.

11 months agoEscape left brace
Josh Lavin [Tue, 25 Jul 2017 15:40:53 +0000]
Escape left brace

unescaped is deprecated in Perl 5.26, fatal in 5.30

11 months agoin Perl 5.26, @INC no longer includes current dir
Josh Lavin [Tue, 25 Jul 2017 15:40:39 +0000]
in Perl 5.26, @INC no longer includes current dir

- prefix path with current dir