Adriano Allora am Sunday, 24. September 2006 01:12:
> hi to all,
>
> another silly question about a pattern matching which should work but
> it doesn't.
>
> I have a list af string similar to this one:
>
>       parola|n.c.,0,fem,sg,0|parola
>
> and I need to select all the chars before the pipe and put them in a
> variable.
>
> That substitution does'n work:
>
>       #!/usr/bin/perl -w
>       use strict;
>       my(%gen, %act, %record, $tex, $char, @parola, $zut);
>       while(<>)
>               {
>               $tex =~ s/^([^|]+).*/$1/o;

$tex is never set before used.

>               print STDOUT "$i errore sulla linea: $_\n" if !$tex;

$i is not defined.

>               }
>
> The error message is (for example):
>
>       Use of uninitialized value in substitution (s///) at ./contalettere.pl
> line 6, <> line 10.
>
> I suppose the rror is in the expression: [^|].

No, it's referring to the fact that $1 is never defined because $tex is never 
defined :-)

Here's a first modified version:

#!/usr/bin/perl

use strict;
use warnings;

while(<DATA>) {
  chomp;
  s/^([^|]+).*/$1/;
  print $_
    ? "ok: $_\n" 
    : "errore sulla linea $. ($_)\n";
}

__DATA__
heyq24614q35gh|-------------
efbäpkmmeth|qrhqeerherth


But you don't need a substitution, a simple match suffices:

#!/usr/bin/perl

use strict;
use warnings;

while(<DATA>) {
  chomp;
  my $tex= /(.*?)\|/
    ? do {warn "ok: $1\n"; $1}
    : do {warn "errore sulla linea $. ($_)\n"; undef};
}
__DATA__
heyq24614q35gh|-------------
efbäpkmmeth|qrhqeerherth



Hope this helps!

Dani

--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to