Thread Regex-Frage: Optionaler Anker (6 answers)
Opened by Kuerbis at 2013-04-03 09:45

GwenDragon
 2013-04-03 10:53
#166854 #166854
User since
2005-01-17
14565 Artikel
Admin1
[Homepage]
user image
Ein Regex oder ein Smartmatch auf anonymes Array, mit den Werten einer Liste.
Welchen Vorteil soll denn das letztere haben?
Nur die andere Schreibweise?

Ich bin mir nicht sicher, aber der Smartmatch mit dem Array alloziert unnötig Speicher. Kann auch sein, dass es nicht stimmt.
Vielleicht weiß jemand mehr dazu.

//EDIT2:

Code: (dl )
1
2
3
4
C:\>perl -MDevel::Size -E"print Devel::Size::total_size([0..9])"
240
C:\>perl -MDevel::Size -E"print Devel::Size::total_size(qr{^\d$})"
88

Das Array verbraucht also mehr Speicher.

//EDIT:
Selbst rausgefunden.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
C:\>perl -MO=Concise -E"print '1' ~~ [0..9]"
b <@> leave[1 ref] vKP/REFC ->(end)
1 <0> enter ->2
2 <;> nextstate(main 46 -e:1) v:%,{ ->3
a <@> print vK ->b
3 <0> pushmark s ->4
9 <2> smartmatch sK/2 ->a
4 <$> const[PV "1"] s ->5
8 <@> anonlist sK*/1 ->9
5 <0> pushmark s ->6
7 <1> rv2av lKP/1 ->8
6 <$> const[AV ] s ->7


Code: (dl )
1
2
3
4
5
6
7
8
C:\>perl -MO=Concise -E"print '1' =~ /^\d$/"
7 <@> leave[1 ref] vKP/REFC ->(end)
1 <0> enter ->2
2 <;> nextstate(main 46 -e:1) v:%,{ ->3
6 <@> print vK ->7
3 <0> pushmark s ->4
5 </> match(/"^\\d$"/) lKS/RTIME ->6
4 <$> const[PV "1"] s ->5


Und der Benchmak zeigt den Vorteil des Regex:
Code: (dl )
1
2
3
4
5
6
7
8
C:\>perl  -MBenchmark -E"Benchmark::cmpthese(1000000, { 'Regex'=>sub {print '1' =~ /^\d$/}, 'Liste'=>sub{p
rint '1' ~~ [0..9]} })"
111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
...
111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111 Rate Liste Regex
Liste 436110/s -- -71%
Regex 1490313/s 242% --

Last edited: 2013-04-03 11:28:00 +0200 (CEST)
die Drachin, Gwendolyn


Unterschiedliche Perl-Versionen auf Windows (fast wie perlbrew) • Meine Perl-Artikel

View full thread Regex-Frage: Optionaler Anker