Beefy Boxes and Bandwidth Generously Provided by pair Networks
There's more than one way to do things
 
PerlMonks  

Re3: Surpised by foreach iterator limitation

by dragonchild (Archbishop)
on Apr 08, 2003 at 17:18 UTC ( #249015=note: print w/replies, xml ) Need Help??


in reply to Re: Re: Surpised by foreach iterator limitation
in thread Surpised by foreach iterator limitation

Explain to me why this wouldn't work:
sub exampl { my %p = @_; my @data = UNIVESAL::isa($p{data}, 'ARRAY') ? @{$p{data}} : ( $p{data} ); foreach my $datum (@data) { return if $p{required} && !$datum; # Do stuff that references $datum } return 1; # Everything is OK }
The point here is that you're stuck in the mode of "I have to reference things the same way". Much better is to say "I have an array of stuff. Let's work with that array."

Remember - You used to call it $p{data} because it was a member of that hash. Now, it's not. So, don't call it that. Embrace the refactoring goodness.

------
We are the carpenters and bricklayers of the Information Age.

Don't go borrowing trouble. For programmers, this means Worry only about what you need to implement.

Please remember that I'm crufty and crochety. All opinions are purely mine and all code is untested, unless otherwise specified.

Replies are listed 'Best First'.
Re: Re3: Surpised by foreach limitation
by shotgunefx (Parson) on Apr 08, 2003 at 18:03 UTC
    There is some misunderstanding here. Parts of the information regarding what I was trying to accomplish were spread out over subsequent posts but many are missing the one point since the first thread. I know why this doesn't work (once I tried it) and I know a million ways to fix it, yet I was suprised that Perl cannot use any lvalue in the iterator slot. Which I wish I named this thread :)

    The reason I tried it in the first place instead of just abondoning $p{data} was that the routine and some called by it expect to be able to reference _PARAMETER_ in the user defined error messages. The error messages replace _NAME_ with $p{NAME} using a regex which is why I did not want to refactor it. That means for the current parameter it must be set or everything retooled. I tried to fix it in the laziest and safest way which did not work which was fine because I went the second laziest way.
    for my $data (@data){ $p{data} = $data; ... }


    -Lee

    "To be civilized is to deny one's nature."

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://249015]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others taking refuge in the Monastery: (4)
As of 2020-10-31 23:09 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    My favourite web site is:












    Results (291 votes). Check out past polls.

    Notices?