in reply to Having trouble porting code between systems.

In ancient Perl versions, it was possible to use %{ $a }{"tag"} instead of ${$a}{"tag"} which is usually written with the dereference arrow as $a->{tag}. In later versions, the syntax became an error, and in the recent versions, it was introduced for key/value hash slices, where %{ $hash_ref }{ 'key1', 'key2' } returns the corresponding key value pairs, e.g. qw( key1 value1 key2 value2 ).

So, replace the line with any of

@arr = sort{ ${ $a }{"tag"} <=> ${ $b }{"tag"} } @arr; @arr = sort{ $$a{"tag"} <=> $$b{"tag"} } @arr; @arr = sort { $a->{tag} <=> $b->{tag} } @arr;

Update: Interestingly, the old syntax will start working in the recent Perl versions again, because %{ $a }{tag} will return both the string "tag" and its corresponding value, but <=> enforces scalar context to its arguments, so only the last one will be used, i.e. the value of the tag.

map{substr$_->[0],$_->[1]||0,1}[\*||{},3],[[]],[ref qr-1,-,-1],[{}],[sub{}^*ARGV,3]