in reply to what difference between eval and do ?
First of all, make the intent of your code clear.
should begrep { s/\d+/a/ } @dd;
or@dd = map { s/\d+/a/r } @dd;
orfor (@dd) { s/\d+/a/; }
s/\d+/a/ for @dd;
Unlike grep and do, eval makes a copy of the values returned like a sub call.
$ perl -E'@dd = 0..9; s/\d+/a/ for @dd; say @dd;' aaaaaaaaaa $ perl -E'@dd = 0..9; s/\d+/a/ for grep { 1 } @dd; say @dd;' aaaaaaaaaa $ perl -E'@dd = 0..9; s/\d+/a/ for do { @dd }; say @dd;' aaaaaaaaaa $ perl -E'@dd = 0..9; s/\d+/a/ for sub :lvalue { @dd }->(); say @dd;' aaaaaaaaaa $ perl -E'@dd = 0..9; s/\d+/a/ for sub { @dd }->(); say @dd;' 0123456789 $ perl -E'@dd = 0..9; s/\d+/a/ for map { $_ } @dd; say @dd;' 0123456789 $ perl -E'@dd = 0..9; s/\d+/a/ for eval { @dd }; say @dd;' 0123456789
|
|---|