Monks, I have a situation that I cannot seem to get around. I am using "exists" on a hash and I keep getting the following error:

exists argument is not a HASH or ARRAY element or a subroutine at deploy.pl line 166 (#1) (F) The argument to exists() must be a hash or array element or a subroutine with an ampersand, such as: $foo{$bar} $ref->{"susie"}12 &do_something Uncaught exception from user code: exists argument is not a HASH or ARRAY element or a subroutine at deploy .pl line 166. at deploy.pl line 166

Here is the code:</>

use strict; use warnings; use File::Find; my %old_list=(); my %new_list=(); my $diffs=DirCompare(); print "$_\n" for @$diffs; find ( sub { $old_list { $_ } = 1 }, $ARCHIVE ); find ( sub { $new_list { $_ } = 1 }, $SourceDir ); sub DirCompare{ for my $file ( keys %old_list ) { if ( exists %new_list{$file} ) { next; } else { push @diffs, "Old file not in new: $file"; } } for my $file ( keys %new_list) { if ( exists %old_list{ $file } ) { next; } else { push @diffs, "Old file not in new: $file"; } } return \@diffs; }

Any light that you can shed on this issue would be greatly appreciated.


In reply to exists EXPR error by smturner1

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.