&main; sub main() { my @mylist = qw(a, b, c); foreach(@mylist) { &fun($_); print "changed:\$_ $_\n"; } } sub fun() { my $ret = open(STATUS, "echo d-e-f|"); while(){ if(/d-e-f/){ close(STATUS); return; } } close(STATUS); } output not a,b,c: changed:$_ d-e-f changed:$_ d-e-f changed:$_ d-e-f