l i n u x - u s e r s - g r o u p - o f - d a v i s
L U G O D
 
Next Meeting:
December 2: Social gathering
Next Installfest:
TBD
Latest News:
Nov. 18: Club officer elections
Page last updated:
2001 Dec 30 17:07

The following is an archive of a post made to our 'vox-tech mailing list' by one of its subscribers.

Report this post as spam:

(Enter your email address)
Re: [vox-tech] Perl: Checking if a hash exists and is true
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [vox-tech] Perl: Checking if a hash exists and is true



Too bad, but as far as barewords and extra "$" go (Micah, I don't want to
say you're wrong :-)), but a little example:

[jdedev]/home/oracle/bin> cat tmp
#!/opt/perl/bin/perl -w

use strict;

my $help = 0;
my %hash = (help=>\$help);
my $refHash = \%hash;

print "w/o \{\}\t: $refHash->{help}\n";
print "w \{\}\t: ${$refHash->{help}}\n";

[jdedev]/home/oracle/bin> ./tmp
w/o {}  : SCALAR(0x400493d0)
w {}    : 0

Jay

----- Original Message -----
From: "Micah Cowan" <micah@cowanbox.com>
To: <vox-tech@franz.mother.com>
Sent: Monday, July 09, 2001 4:09 PM
Subject: Re: [vox-tech] Perl: Checking if a hash exists and is true


> On Mon, Jul 09, 2001 at 02:39:15PM -0500, Jay Strauss wrote:
> > I'm trying to check if a hash key exists and if the value is 1.  I'm
passing
> > the reference to the hash to a subroutine like:
> >
> > my $help = 1;
> > my %hash = (help=>\$help);
> > somefunc(\%hash);
> >
> > sub somefunc {
> >     my ($refHash) = @_;
> >
> >     if ((defined $refHash->{help}&& ${$refHash->{help}}) {
> >         # stuff
> >     }
> >     else {
> >         # other stuff
> >     }
> > }
> >
> > This seems long an clumsy, I suspect there is a cleaner way to do it in
perl
> > but I don't know how.  I played around with "exists" but that just tells
me
> > that the value exists.  I need to do some processing if the value is "1"
and
> > other processing for "0";
>
> This is pretty much how you have to do it, I'm afraid.
>
> If you were using 'use strict', however, the 'help' bareword would not
> be accepted.  I probably would swap 'exists' for 'defined', unless you
> might actually set $refHash->{'help'} to undef explicitly, and want to
> test for that (but that's just me); also, the ${$refHash->{help}}
> could be shortened to $refHash->{'help'}.
>
> So, if you care, here's my version - but it doesn't solve the
> "problem" which caused you to ask in the first place :(
>
> sub somefunc {
>   my $refHash = shift;
>
>   if (exists $refHash->{'help'} && $refHash->{'help'}) {
>     # stuff
>   } else {
>     # other stuff
>   }
> }
>
> The difference is pretty much all style, so feel free to ignore it
> (except, I really do recommend you use 'use strict').
>
> Micah


_________________________________________________________
Do You Yahoo!?
Get your free @yahoo.com address at http://mail.yahoo.com


LinkedIn
LUGOD Group on LinkedIn
Sign up for LUGOD event announcements
Your email address:
facebook
LUGOD Group on Facebook
'Like' LUGOD on Facebook:

Hosting provided by:
Sunset Systems
Sunset Systems offers preconfigured Linux systems, remote system administration and custom software development.

LUGOD: Linux Users' Group of Davis
PO Box 2082, Davis, CA 95617
Contact Us

LUGOD is a 501(c)7 non-profit organization
based in Davis, California
and serving the Sacramento area.
"Linux" is a trademark of Linus Torvalds.

Sponsored in part by:
EDGE Tech Corp.
For donating some give-aways for our meetings.