in reply to perl 5 interpreter crashes

This code line:
parser $_;
is wrong, because the parser subroutine has not been declared at this point and the Perl compiler does not know yet what parser is supposed to be.

So either you give the compiler a clue that it is a subroutine call by putting the argument between parentheses:

parser($_);
or you define the parser subroutine beforehand:
use strict; use warnings; sub parser { print "Hello, world\n"; } open INFILE, '<', $0; while (<INFILE>) { chomp; parser $_; } __END__
which will duly print Hello, world a number of times.

You could even define your parser subroutine afterwards as in your code, provided you pre-declare it before you use it:

use strict; use warnings; sub parser; open INFILE, '<', $0; while (<INFILE>) { chomp; parser $_; } sub parser { print "Hello, world\n"; } __END__
Note: all my three suggested corrections above run correctly under Windows.