SkÃ¥ne Sjælland Linux User Group - http://www.sslug.dk Forside   Tilmelding   Postarkiv   Forum   Kalender   Søg
MhonArc Dato: [Date Prev] [Kronologisk oversigt] [Date Next]   TrÃ¥d: [Date Prev] [Oversigt trÃ¥de] [Date Next]   MhonArc
 

Re: [PERL] Hvorfor er jeg nødt til at bruge 'my'der?



Henrik Christian Grove <sslug@sslug> writes:

> find H-E | rename 'm|.*/(.)(.*)_(.*[0-9]+.*)|; `mkdir $1; mkdir
> $1/$1$2`; $a=$1; $b=$2; my $c=$3; s|.*|$a/$a$b/$c|;'

Som jeg sagde i torsdags, så bruger debians rename rigtig nok 'use
strict'. Følgende giver ikke nogen fejl hos mig:

find H-E | rename 'no strict; m|.*/(.)(.*)_(.*[0-9]+.*)|; `mkdir $1;
mkdir $1/$1$2`; $a=$1; $b=$2; my $c=$3; s|.*|$a/$a$b/$c|;'

Det er måske lidt en Debian-specialitet. I changelog-entryen for
version 5.6.0-0.3 står der følgende:

  * Patched eg/rename to use the modern rewritten version from Robin
    Barker (sslug@sslug).

(Hmmm, /eg er helt forsvundet fra perl-5.8.0)

> Mit spørgsmål er ganske enkelt hvorfor, eller måske snarere hvorfor $a
> og $b ikke skal have et 'my'?

Og det er jo et ganske interessant spørgsmål. Af en eller anden grund
behandler perl $a og $b specielt. Et bud kunne være at det er af
hensyn til sort. 

Hvis sort som første argument får en sammenligningsfunktion uden
prototype binder den de to elementer der skal sammenlignes til $a og
$b. Dette ville være umuligt at skrive uprototypet
sammenligningsfunktioner under strict hvis de ikke blev behandlet
specielt.

-- 
 Peter Makholm     |        One thing you do is prevent good software from
 sslug@sslug |      being written. Who can afford to do professional
 http://hacking.dk |                                     work for nothing?
                   |                                         -- Bill Gates


 
Forside   Tilmelding   Postarkiv   Oversigt   Kalender   Søg

 
 
Henvendelse vedrørende websiderne til <www_admin>. Senest ændret 2005-08-10, klokken 19:54
Denne side vedligeholdes af MHonArc .