If the data is indeed CSV, and not pipe-separated, most monks would use a CSV parser and write
while (my $row = $csv->getline ($fh)) {
$row->[0] eq "A.SERIAL_NUMBER||" and next;
:
Giving the OP's code, I seriously doubt however that it is a CSV file.
If the file is a pipe-separated-value file, that can also be read with Text::CSV or Text::CSV_XS.
Enjoy, Have FUN! H.Merijn
| [reply] [d/l] |
While many people do use regular expressions, I think that's like using an M16 to crack walnuts.
R.E. are the appropriate solution when you have variable components, but testing a constant string is precisely what 'eq' is for.
As Occam said: Entia non sunt multiplicanda praeter necessitatem.
| [reply] |
You make a good point, but I found myself wondering how the combination of substr, length, and eq would compare to a single anchored regex, so I did a benchmark. I'm convinced!
bannor:~/work/perl/monks$ cat 968838.pl
#!/usr/bin/env perl
use Modern::Perl;
use Benchmark qw(:all);
my $str = 'A.SERIAL_NUMBER||abcdefghijklmnopqrstuvwxyz';
my $ss = 'A.SERIAL_NUMBER||';
my $yay;
cmpthese( 10_000_000, {
'substr' => sub {
if(substr($str,0,length($ss)) eq $ss ){
$yay = 1;
}
},
'regex' => sub {
if( $str =~ /^\Q$ss\E/ ){
$yay = 1;
}
},
});
bannor:~/work/perl/monks$ perl 968838.pl
Rate regex substr
regex 1312336/s -- -65%
substr 3802281/s 190% --
| [reply] [d/l] [select] |