Прежде всего: вы знаете, что вы можете использовать $ENV{myvariable}
для доступа к переменным окружения, верно? А что вам не нужно указывать $_
при использовании m//
, s///
и tr///
?
Кроме того, если вы хотите передать переменные в perl, есть и другие способы сделать это, кроме попытки интерполировать переменные оболочки в ваш код perl.
perl -we 'my ($var1, $var2, $var3) = @ARGV;' "$MYFOO" "$BAR" "$baz"
Если ваши переменные оболочки не содержат пробелов, вы можете обойтись без кавычек.
Теперь, если вы хотите использовать переключатели -p
или -n
, есть и обходные пути.
perl -pwe 'BEGIN { my $var1 = shift; my $var2 = shift } #code goes here'
"$MYFOO" "$BAR" file1 file2
Использование shift
в операторе BEGIN приведет к удалению переменных из @ARGV
, чтобы они не использовались неявным циклом while
переключателей -p
и -n
.