Rajeev wrote:
>
> Hi Rob,
>
> I have written a routine here .. not exactly whay u told.. before that I have a
> problem with regex..
>
> I want to pass the regex on which the splitting (or record separation logic in my
> code) will happen such that I can call the same
function with different record splitting criteria.
>
> Somehow this does not work ..
> I tried passing $seperator = '/(?m:^\s*\n$)/';
> and later tried to do a match with $serapator .. this fails..
>
> Please tell me what shall I do.
> **************************************************************
> my $seperator = '/(?m:^\s*\n$)/';
> my %rec = GET_RECORD([EMAIL PROTECTED], $separator);
>
> sub GET_RECORD {
> my ($buffer, $separator) = @_;
> my %record = ();
>
> foreach $line (@{$buffer}) {
> #if($line =~ $seperator) { -------->>>> DOES NOT WORK
> if($line =~ /(?m:^\s*\n$)/) { --------->>> This works
> $i++;
> } else {
> push @{$record{$i}} , $line;
> }
> }
> return %record;
> }
> ***************************************************************
I don't think it 'fails' does it? The regex you're passing is
valid as far as I can tell, but nonsensical. It will match
the following sequence:
- an optional open parenthesis
- a lowercase 'm'
- a colon
- the start of a new record
- zero or more whitespace characters
- a newline
- the end of a record
But if you say that this is what you want then that's fine.
The main reason it's not working is that you've written
my ($buffer, $separator) = @_;
^
:
if ($line =~ $seperator)
^
Also, it will help if you write
my $separator = qr/(?m:^\s*\n$)/;
so that the string is parsed as a regex at compile time.
If you're indexing 'record' with an integer then you should use
an array:
my @record;
:
push @{$record[$i]}, $line;
Over all, it looks like you're working far too hard to achieve
a simple result. The code below will do what you seem to want.
Please post responses back to the list.
Cheers,
Rob
use strict;
use warnings;
my @record;
my $i = 0;
open IN, 'abc' or die $!;
while (<IN>) {
chomp;
if (/\S/) {
push @{$record[$i]}, $_;
}
else {
$i++ if @{$record[$i]};
}
}
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]