$ARGV[0]
é uma string escalar. Quando você faz if($l =~ $ARGV[0])
e $ARGV[0]
é '/^[\w]/g'
, isso equivale a if($l =~ '/^[\w]/g')
em vez de if($l =~ /^[\w]/g)
. No primeiro caso, as barras são simplesmente caracteres em uma string, enquanto no final elas fazem parte da sintaxe Perl que delimita uma expressão regular.