in reply to Re^3: Array got modified!
in thread Array got modified!

Hmm... my try is to take that array as a file handle to read, like @ARGV;

I add up this code :

@x = qw/Foo Bar Blaz/; #@x = qw//; print "Before: @x$/"; while ( my $ele = <@x> ) { next unless $ele; print "$ele becomes "; $ele =~ s/^(.)/x$1/; print $ele . $/; } print "$/After: @x"; __END__ Then I have : Before: Foo Bar Blaz Foo becomes xFoo Bar becomes xBar Blaz becomes xBlaz After: Foo Bar Blaz
Is this work out properly by accident? This is what I want though...
My observation is:
if that's a empty array, it skips fine.
And, without the diamond quote, it loops forever...

Replies are listed 'Best First'.
Re^5: Array got modified!
by Anonymous Monk on Oct 10, 2011 at 13:00 UTC
    $ perl -MO=Deparse junk print "Before: @x$/"; use File::Glob (); while (defined(my $ele = glob(join $", @x))) { do { next unless $ele; print "$ele becomes "; $ele =~ s/^(.)/x$1/; print $ele . $/ }; } print "$/After: @x"; __DATA__ junk syntax OK

    See glob, readline

      Sorry but I don't get it.

      First, after a perldoc on the glob, I get totally lost, I never touch a Unix shell, so I couldn't imagine or relate to anything.. I am on Win32 all time..

      Second, would you explain more for what is your code try to demonstrate? Is this a safe/suggested way to do what I want? or it's proving my way is danger? or anything else ?

        Second, would you explain more for what is your code try to demonstrate?

        Um, its your code run through B::Deparse

Re^5: Array got modified!
by choroba (Cardinal) on Oct 10, 2011 at 13:44 UTC
    Yes, it's working by accident (no spaces nor * in @x). For example:
    perl -E '@arr=("a b", "c d", qw/e f g h a*/); while (my $e = <@arr>) { say $e }'
    gives this output for me:
    a b c d e f g h address.txt address.txt~ analytic ascii.htm aux-no-lex.lst
      Got it! Didn't aware of it at all....
      Lesson learned!! Thanks a lot!!! =)