हमेशा की तरह, जब आप कोड के दो टुकड़े का जो पता करने के लिए तेजी से काम करता है चाहते हैं, तो आप इसे परीक्षण करने के लिए है:
#!/usr/bin/perl
use 5.012;
use warnings;
use Benchmark qw<cmpthese>;
say "Extreme ,,,:";
my $Text = ',' x (my $LEN = 512);
cmpthese my $TIME = -10, my $CMP = {
capture => \&capture,
lookahead => \&lookahead,
};
say "\nExtreme ,0,0,0:";
$Text = ',0' x $LEN;
cmpthese $TIME, $CMP;
my $P = 0.01;
say "\nMixed (@{[$P * 100]}% zeros):";
my $zeros = $LEN * $P;
$Text = ',' x ($LEN - $zeros) . ',0' x $zeros;
cmpthese $TIME, $CMP;
sub capture {
local $_ = $Text;
s/,(\d)/$1/;
}
sub lookahead {
local $_ = $Text;
s/,(?=\d)//;
}
बेंचमार्क तीन अलग-अलग मामलों का परीक्षण करती है:
- केवल ', '
- केवल', 0 '
- 1%', 0 ', बाकी', '
मेरी मशीन पर और मेरे पर्ल संस्करण के साथ, यह इन परिणामों का उत्पादन:
Extreme ,,,:
Rate capture lookahead
capture 23157/s -- -1%
lookahead 23362/s 1% --
Extreme ,0,0,0:
Rate capture lookahead
capture 419476/s -- -65%
lookahead 1200465/s 186% --
Mixed (1% zeros):
Rate capture lookahead
capture 22013/s -- -4%
lookahead 22919/s 4% --
इन परिणामों धारणा लुक-आगे संस्करण कैप्चरिंग की तुलना में काफी तेजी से, लगभग केवल अल्पविराम के के मामले के अलावा है कि substantiates। और वास्तव में यह आश्चर्य की बात नहीं है क्योंकि पीएसआईआईएलटी ने अपनी टिप्पणी में पहले से ही समझाया है।
संबंध है, मथायस
दो regexes पर कुछ बेंच मार्किंग परीक्षण कर मैं वास्तव में किसी भी बड़ा अंतर निर्धारित नहीं कर सकता। दोनों बहुत तेज़ हैं। ध्यान दें कि यह इन regexes पर लागू होता है, कैप्चरिंग बनाम देखो। – TLP
यह स्पष्ट है: डेटा कॉपी करने के लिए समूह बल को कैप्चर करें और फिर प्रतिस्थापन पर '$ 1' की इंटरपोलेशन की आवश्यकता है, जबकि दूसरा रेगेक्स बस ढूंढ/चेक/निकालें। हालांकि, गति में अंतर अदृश्य होना चाहिए। – PSIAlt