Po pierwsze: wiesz, że możesz użyć $ENV{myvariable}
, aby uzyskać dostęp do zmiennych środowiskowych, prawda? I nie musisz określać $_
podczas korzystania z m//
, s///
i tr///
?
Ponadto, jeśli chcesz przekazać zmienne do perla, istnieją inne sposoby robienia tego poza próbą interpolacji zmiennych powłoki do twojego kodu perla.
perl -we 'my ($var1, $var2, $var3) = @ARGV;' "$MYFOO" "$BAR" "$baz"
Jeśli zmienne powłoki nie zawierają białych znaków, można zrezygnować z cytowania.
Teraz, jeśli chcesz użyć przełączników -p
lub -n
, są również sposoby obejścia tego.
perl -pwe 'BEGIN { my $var1 = shift; my $var2 = shift } #code goes here'
"$MYFOO" "$BAR" file1 file2
Korzystanie shift
w oświadczeniu BEGIN usunie zmienne z @ARGV
tak, że nie są one wykorzystywane przez niejawny while
pętli -p
i -n
przełączników.
Uwaga bliżej: nie bądź niedorzeczny. Pytania dotyczące programowania Shell absolutnie należą do stackoverflow. – tchrist
Nie potrzebujesz *, aby użyć tamtej zmiennej '$ _'. – TLP
@TLP - to był tylko przykład. W prawdziwym skrypcie naprawdę potrzebowałem tego. :) – Rogach