in reply to Delete a line
Hello karthik92,
Welcome to the Monastery. Well it looks the fellow Monk 1nickt provided an answer to your question. Just to include a two more alternative solutions:
#!/usr/bin/perl use strict; use warnings; # use Benchmark qw(:all) ; # WindowsOS use Benchmark::Forking qw( timethese cmpthese ); # UnixOS my $str = " test of white space"; my $results = timethese(100000000, { 'regex' => sub { $str =~ /^\s/ }, 'substr' => sub { substr($str, 0, 1) eq ' ' }, 'ord' => sub { ord($str) == 32 }, }, 'none'); cmpthese( $results ); __END__ $ perl test.pl Rate regex substr ord regex 9225092/s -- -44% -87% substr 16556291/s 79% -- -77% ord 73529412/s 697% 344% --
I used Benchmark to compare the alternative solutions and the fastest and best option on this case seems to be ord.
Update: Sample of the proposed solution:
my @strs = ("1234 pass 25 30 1", " pass 25 30 2", "1965 pass 35 45 1", " pass 35 45 2"); foreach my $sample (@strs) { if (ord($sample) == 32) { say "Matched: " . $sample; } } __END__ $ perl test.pl Matched: pass 25 30 2 Matched: pass 35 45 2
Update2: In case you are wondering about ord it simply reads the first character and returns the numeric value. From the ASCII table 32 decimal is SPACE number 1 (character) would return 49.
Hope this helps, BR.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Delete a line
by Laurent_R (Canon) on Dec 22, 2017 at 19:53 UTC | |
by thanos1983 (Parson) on Dec 24, 2017 at 16:57 UTC | |
|
Re^2: Delete a line
by Anonymous Monk on Dec 22, 2017 at 21:34 UTC |