I've been programming in Perl for a while, but I never have understood a couple of subtleties about Perl:

The use and the setting/unsetting of the $\_ variable confuses me. For instance, why does

```
# ...
shift @queue;
($item1, @rest) = split /,/;

```

work, but (at least for me)

```
# ...
shift @queue;
/some_pattern.*/ or die();

```

does not seem to work?

Also, I don't understand the difference between iterating through a file using `foreach` versus `while`. For instance,I seem to be getting different results for 

```
while(<SOME_FILE>){  
    # Do something involving $_        
}

```

and 

```
foreach (<SOME_FILE>){
    # Do something involving $_
}

```

Can anyone explain these subtle differences?