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