Widziałem wiele sposobów uruchamiania kodu lub skryptów Perla z różnymi flagami. Jednak kiedy próbuję wyszukać w Google, co oznacza każda flaga, otrzymuję wyniki głównie do ogólnych witryn Perla i nie znajdują tam żadnych konkretnych informacji dotyczących flag ani ich użycia.
Poniżej flagi, które napotykam najczęściej i nie mam pojęcia, co oznaczają:
- perl -pe
- perl -pi
- perl -p
- perl -w
- perl -d
- perl -i
- perl -t
Będę bardzo wdzięczny, jeśli powiesz mi, co każdy z nich oznacza i jakie są ich przypadki użycia, lub przynajmniej podasz mi, w jaki sposób mogę znaleźć ich znaczenie.
perl
command-line
flags
Tudor Constantin
źródło
źródło
perldoc perlrun
zawiera listę wszystkich opcji wiersza poleceń, które akceptuje Perl.Odpowiedzi:
Tak, Google notorycznie ma trudności z wyszukiwaniem interpunkcji i niestety wydaje się , że Perl składa się głównie z interpunkcji :-)
Wszystkie przełączniki wiersza poleceń są szczegółowo opisane w perlrun . (dostępne z linii poleceń, dzwoniąc
perldoc perlrun
)Przechodząc do opcji krótko, jeden po drugim:
źródło
perldoc perlrun
. Usunąłem swoją odpowiedź. :-)-w
generalnie należy go unikać, ponieważ umożliwia ostrzeżenia dla całego kodu, w tym modułów CPAN, które nie zostały napisane z myślą o ostrzeżeniach. Wyniki są generalnie dość hałaśliwe, a także całkiem bezużyteczne.-w
jest generalnie unikany, ale należy go zastąpićuse warnings
we własnym kodzie.use warnings
w swoim własnym kodzie, ale -w ma swoje zastosowanie - pomaga usunąć źle napisane moduły CPAN. :-)-i
przyjmuje rozszerzenie kopii zapasowej.-e
przyjmuje polecenie Perla. W-0ep
mówisz Perl, że „p” jest poleceniem Perl zamiast argumentu. To wcale nie wyjdzie dobrze.-p
Flag zasadzie uruchamia skrypt-e
umożliwia przekazanie skryptu doSTDIN
-i
wskazuje interpreterowi, że wszystkie dane przekazywaneSTDIN
przez skrypt wykonawczy mają być wykonywane w miejscu.-w
jest taki sam jakuse warnings;
, ale w zasięgu globalnym, a nie lokalnym-d
uruchamia debuger Perlaźródło
-w
nie jest dokładnie tym samym, couse warnings
, ten ostatni jest ograniczony do pliku lokalnegoInni wspominali o perlrunie. Jeśli używasz B :: Deparse, możesz zobaczyć, co to oznacza (dla większości rzeczy):
1 jest reprezentowane przez „???”, ponieważ jest zoptymalizowane.
-i ustawia $ ^ I, jak
Ale pamiętaj, <ARGV> używa 2-argumentowego otwarcia, więc nie używaj nazw plików, które zaczynają się
> <
lub zaczynają / kończą się|
.źródło
Jest też jedna ważna flaga,
-n
której nie ma na liście.-n
działa tak samo jak-p
, tylko że$_
domyślnie nie drukuje . Może to być bardzo przydatne w filtrowaniu plików tekstowych.W ten sposób Perl może zastąpić
grep | sed
pojedynczą linijkę.Na przykład:
perl -ne 'print "$1\n" if /Messages read: (\d+)/' <my_input.txt
Wypisze każdą liczbę całkowitą znalezioną po „Przeczytanych wiadomościach:” i nic więcej.
źródło
print $1
to nie to samo, coprint
(print $_
).echo abc | perl -nw -e "print if (1)"
wydrukujeabc
. Nie ma potrzeby$1
odniesienia.