Thread sprintf um rechts im String 0 aufzufüllen
(15 answers)
Opened by bianca at 2015-02-14 19:07
Hi bianca,
Bei Deiner Konstruktion muss noch ein scalar vorangestellt werden, bzw. Du musst den skalaren Kontext sicherstellen. Noch eine Variante (für numerische Werte): $string * 10 ** ( 12 - length( $string ) ). Ist wahrscheinlich etwas schneller. Vergleichen kannst Du mit ![]() Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #!/usr/bin/perl -w use strict; use Benchmark qw( cmpthese ); my $string = "1234567890"; my $new; cmpthese( 0, { "reverse" => sub { $new = scalar reverse( sprintf "%012s", scalar reverse( $string ) ) }, # "regex" => sub { $new = sprintf( "%-12d", $string ) =~ s/ /0/gr }, "regexOld" => sub { ( $new = sprintf( qq( %-12d ), $string ) ) =~ s/ /0/g }, "length" => sub { $new = $string . 0 x ( 12 - length( $string ) ) }, "mult" => sub { $new = $string * 10 ** ( 12 - length( $string ) ) }, } ); Die Regex-Variante von payx kann ich hier nicht ausführen (Perl 5.12, da geht /r nicht). Das nur als Demo. Wenn es wichtig ist, solltest Du ein Testszenario wählen, das Deiner Anforderung entspricht. Ausgabe: Code: (dl
)
1 Rate regexOld reverse length mult Die Ausgabe zeigt die langsamste Variante oben (regexOld). Gruß, FIFO EDIT: Die Regex-Variante für Perl < 5.14 ergänzt, vgl. payx' Antwort. Last edited: 2015-02-15 16:06:22 +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"
|