Thread Use of implicit split to @_ is deprecated umgehen (14 answers)
Opened by bianca at 2011-03-12 15:59

FIFO
 2011-03-13 07:59
#146450 #146450
User since
2005-06-01
469 Artikel
BenutzerIn

user image
2011-03-12T18:29:08 bianca
Jo, das ist ja schön. Danke für den Beitrag aber das scheidet aus und das war auch nicht die Ursprungsfrage.


Geht aber in die richtige Richtung. Wenn es "sauber" sein soll, ist die RegEx immer noch am solidesten, nur besser nicht als s///, dann bleibt die Variable unverändert:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/usr/bin/perl
use warnings;
use strict;
while (my $s = <DATA>) {
    chomp $s;
    my $d = () = $s =~ /(?:(?:^|,)[^,])/g; 
    print "$d\n";
}
__DATA__
1,2,3,4,5
,1,2,3,4
1,2,3,4,,
,,,,,,1,2,3,,,,,4,,,,,,,,


oder als Funktion (ohne lokale Kopie des Strings):
Code (perl): (dl )
1
2
3
sub howmany {
    return scalar(() = $_[0] =~ /(?:(?:^|,)[^,])/g);
}


Noch einfacher:
Code (perl): (dl )
1
2
3
sub howmany {
    return scalar(() = $_[0] =~ /(?:[^,]+)/g);
}


In die Zeichenklasse kann man auch was anderes reinschreiben, um gleich die Werte auf Korrektheit zu prüfen, z.B. [.,0-9-] oder POSIX-Klassen verwenden.

Gruß FIFO


Editiert von FIFO: sub ergänzt
Last edited: 2011-03-13 08:36:54 +0100 (CET)
Everyone knows that debugging is twice as hard as writing a program in the first place. So if you're as clever as you can be when you write it, how will you ever debug it? -- Brian Kernighan: "The Elements of Programming Style"

View full thread Use of implicit split to @_ is deprecated umgehen