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