BEG: $0 z bashe a krajeni

David Olszyński hisaak na mendelu.cz
Pondělí Srpen 19 13:35:34 MEST 2002


Matej Cepl wrote:

> Dobrý den,
> 
> jsem začátečník s perlem (zatím jsem pracoval jenom s bashem a trochu s
> Pythonem, ale ten mi připadne drobátko overkill na spoustu věcí) a měl bych
> dva dotazy, které se mi nepodařilo rozluštit z toho, co jsem úvodních
> materiálů, které jsem na webu potkal.
> 
> 1) Co je v $_[0] při spuštění skriptu? 

Podle me nic. Mozna si to pletete s polem @ARGV.

> 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
> 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';
> }

basename: příliš málo argumentů
Více informací získáte příkazem `basename --help`.

Asi by tam melo byt $ARGV[0]. A i tak by to nedelalo pozadovane, protoze 
vystup toho volani basename by byl ukoncen koncem radku.

> Existuje nějaká interní verze bashovského basename?

Nevim, man perlfunc mlci, ale na tohle by stacil jeden prikaz s///.

> 
> 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?

V urcitem okazmiku mozna ano, ale na konci cyklu nejspis ne.

> 
> 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ě).

Doporucoval bych intenzivnejsi cetbu manualu ci velbloudi knihy a taky hodne 
samotneho testovani. Jinak tady stravime podobnymi dotazy spoustu casu. ;-)

hisaak



Další informace o konferenci Perl