in reply to Re: Deparse broken or just misunderstood?
in thread Deparse broken or just misunderstood?
I think that would be my preference, although your suggestion (modulo typos) is perfectly fine.my $d; foreach ($d = 'Shakespear is the food') { s/foo/bar/; }
I believe that the behavior allowing it to work in the case of the 'for' modifier is not defined, and thus may change in future Perl refinements.Certainly the scoping of the variable is defined, and according to perlsyn, "a declaration can be put anywhere a statement can," and "apart from declaring a variable name, the declaration acts like an ordinary statement, and is elaborated within the sequence of statements as if it were an ordinary statement. That means it actually has both compile-time and run-time effects."
I think the behavior is pretty well-defined by that. The only issue is the scoping difference between predicate-for and block-for, which Deparse didn't accout for.
By the way, I agree that this trick is not for mainstream code. Nifty tricks are not elegant solutions, but they can be useful for getting a better understanding of what lies behind a limitation.
And it's less ugly than
(which Deparse doesn't change materially) :-)(sub { $_[0] =~ s/foo/bar/ })->(my $d = 'Shakespear is the food');
|
|---|