Trước tiên: Bạn biết rằng bạn có thể sử dụng $ENV{myvariable}
để truy cập vào biến môi trường, phải không? Và bạn không cần phải chỉ định $_
khi sử dụng m//
, s///
và tr///
?
Hơn nữa, nếu bạn muốn chuyển các biến cho perl, có nhiều cách khác để thực hiện điều đó ngoài việc cố gắng nội suy các biến shell vào mã perl của bạn.
perl -we 'my ($var1, $var2, $var3) = @ARGV;' "$MYFOO" "$BAR" "$baz"
Nếu biến hệ vỏ của bạn không chứa khoảng trắng, bạn có thể phân phối bằng trích dẫn.
Bây giờ, nếu bạn muốn sử dụng các công tắc -p
hoặc -n
, cũng có nhiều cách khác.
perl -pwe 'BEGIN { my $var1 = shift; my $var2 = shift } #code goes here'
"$MYFOO" "$BAR" file1 file2
Sử dụng shift
trong một tuyên bố BEGIN sẽ loại bỏ các biến từ @ARGV
để họ không được sử dụng bởi các while
loop ngầm của -p
và -n
chuyển mạch.
Chú ý gần hơn: đừng lố bịch. Các câu hỏi lập trình Shell hoàn toàn thuộc về stackoverflow. – tchrist
Bạn không * cần * để sử dụng biến '$ _' ở đó. – TLP
@TLP - đó chỉ là một ví dụ. Trong kịch bản thực sự, tôi thực sự * cần * nó. :) – Rogach