SPUG: do vs. eval with Data::Dumper
Jeremy Devenport
jeremy at weezel.com
Wed Jan 26 12:47:17 CST 2000
Maybe this little tidbit from `perldoc -f do` will help.
It also differs in that code evaluated with 'do FILENAME'
cannot see lexicals in the enclosing scope; 'eval STRING' does.
This is listed as one of the minor details in the second paragraph.
Jeremy
Tim Maher/CONSULTIX wrote:
>
> SPUGsters (and E-SPUGsters),
>
> I'm working on a complicated Data::Dumper example for my "Intermediate
> Perl" course, which worked just fine until I enabled "use strict" and
> rendered some previously global variables private.
> (I know, been there, done that, got the T-shirt . . .)
>
> I found a solution, but it shouldn't work, from what I read! 8-}
> Specifically, although the Camel says that "do file" is the same as
> "eval `cat file`" (p. 158), except for a few minor details, I'm finding
> evidence that there's a fundamental difference.
>
> It looks like "do" is executing the code in its own scope, but eval is
> using the surrounding scope.
>
> Or is there another explanation for the output of this test program?
>
> #! /usr/bin/perl -w
> use strict;
>
> my $size=0;
>
> open FILE, '> /tmp/dofile' or die;
> print FILE ' $size=42; ';
> close FILE or die;
>
> print "File contains: ", `cat /tmp/dofile`, "\n";
>
> do '/tmp/dofile';
> print "\nDo yields:\t$size\n"; # prints 0
>
> eval `cat /tmp/dofile`;
> print "\nEval yields:\t$size\n"; # prints 42
>
> OUTPUT:
>
> File contains: $size=42;
>
> Do yields: 0
>
> Eval yields: 42
>
> Also, I'm trying to make an alias for Data::Dumper::Dump (unexported!),
> using variations including:
> *::Dump = \&Data::Dumper::Dump;
> and
> *Dump = *Data::Dumper::Dump;
>
> but when I hit the line below, I get;
> Can't coerce array into hash at
> /usr/lib/Perl5/5.00502/i586-linux/Data/Dumper.pm line 161.
>
> print Dump([$size, \%pals, $hosts, \@::words],
> ["size", "*${prefix}pals", "${prefix}hosts", "*${prefix}words"]);
>
> (I set $prefix to :: to reload variables as globals, with "strict"
> in effect)
>
> What's wrong here? And why doesn't Data::Dumper export Dump()
> in the first place? 8-}
>
> TIA,
> *========================================================================*
> | Tim Maher, PhD Consultix & (206) 781-UNIX/8649 |
> | Pacific Software Gurus, Inc Email: tim at consultix-inc.com |
> | UNIX/Linux & Perl Training http://www.consultix-inc.com |
> | 2/22: UNIX 2/28: Perl Modules 2/29: Int. Perl 3/3: Pattern Matching |
> *========================================================================*
>
> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> POST TO: spug-list at pm.org PROBLEMS: owner-spug-list at pm.org
> Seattle Perl Users Group (SPUG) Home Page: http://www.halcyon.com/spug/
> SUBSCRIBE/UNSUBSCRIBE: Replace ACTION below by subscribe or unsubscribe
> Email to majordomo at pm.org: ACTION spug-list your_address
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
POST TO: spug-list at pm.org PROBLEMS: owner-spug-list at pm.org
Seattle Perl Users Group (SPUG) Home Page: http://www.halcyon.com/spug/
SUBSCRIBE/UNSUBSCRIBE: Replace ACTION below by subscribe or unsubscribe
Email to majordomo at pm.org: ACTION spug-list your_address
More information about the spug-list
mailing list