BEG: $0 z bashe a krajeni
Honza Pazdziora
adelton na informatics.muni.cz
Pondělí Srpen 19 12:32:45 MEST 2002
On Mon, Aug 19, 2002 at 12:25:29PM +0200, Matej Cepl wrote:
>
> 1) Co je v $_[0] při spuštění skriptu? Podle logiky bashe (a mám pocit, že
> perl je tak trochu "advanced bash" což se mi na něm docela líbí) by to měl
> být název skriptu, ale to co jsem našel mi tvrdí, že to je první argument
> skriptu (jak jste jistě pochopili, v tomto okamžiku nemám žádný perl po ruce
No, v @_ jsou parametry predane funkci, cili v hlavnim programu tam
neni nic, to pole je prazdne. Parametry predane programu jsou v poli
@ARGV, cili prvni parametr je v $ARGV[0]. A jmeno skriptu je v $0.
> a nechce se mi stahovat 10MB+ po telecomím telefonu; ke svému počítači s
> Linuxem se dostanu až asi za dva týdny).
>
> To jest, co udělá tento kousek skriptu?
>
> if (`basename $_[0]` eq 'pdfvlnlatex') {
> $prog = 'pdflatex';
> }
> else {
> $prog = 'latex';
> }
Pokud by v promenne $_[0] bylo neco, jehoz basename je 'pdfvlnlatex',
tak provede prvni prirazeni, jinak druhe prirazeni. Lec, pravdepodobne
tam chcete mit spis $0 (pokud ta ukazka kodu neni cast funkce, ktere
jako parametr to $0 predate, pak by se to samozrejme objevilo v @_
a tim i v $_[0]).
> Existuje nějaká interní verze bashovského basename?
Ne, Perl ma obecne relativne malo internich funkci (podobne jako treba
C), ale neni problem udelat
$prog =~ s!.*/!!
coz sezere vsechno az po posledni lomitko.
> 2) Nejsem si úplně jist s argumentem \1 v příkazu s. Mám-li tento kousek
> skriptu (na krájení emailové zprávy):
>
> foreach $msg (@_) {
> $_ = $msg;
> s/^Subject:\s*(.*)\n/\1/;
> chomp;
> .. další zpracování ...
> }
>
> mám výsledně v $_ subject zprávy?
Je velmi pravdepodobne, ze ano, ale je vyrazne lepsi pouzit v tomto
kontextu $1, nikoli \1. \1 bude pravdepodobne take fungovat, ale
takoveto pouziti neni doporucovane. \1 se pouziva na leve strane
substituce na zopakovani kusu podretezce.
> Děkuji moc a omlouvám se za začátečnické dotazy (a za to, že mám dvě otázky
> v jedné zprávě).
Zatim to nebylo tak strasne, na to, ze programujete v Perlu bez toho,
abyste mel interpret. :-))
--
------------------------------------------------------------------------
Honza Pazdziora | adelton na fi.muni.cz | http://www.fi.muni.cz/~adelton/
... all of these signs saying sorry but we're closed ...
------------------------------------------------------------------------
Další informace o konferenci Perl