Adriano Allora wrote: > > Hi to all, Hello,
> I've just learnt ( ... anyway, I'm trying to do it) to select a > string when it is not preceded (or followed) by another string. Perhaps you should read up on the positive/negative look-ahead/look-behind assertions in the perlre document. perldoc perlre > My aim is to know the mean of text lines in each newsgroup post, so I > wrote: > > #!/usr/bin/perl -w > > $nome_del_file = q/text.txt/; > > open(INPUT, $nome_del_file); You should _always_ verify that the file opened successfully. open INPUT, $nome_del_file or die "Cannot open $nome_del_file: $!"; > $posts = 0; > $line4post = 0; > > while (<INPUT>) > { > # it cleans the <return carriage> signs > tr/\015|\012/\n/; This translates either a carriage return (\015) or a vertical bar (|) or a linefeed (\012) to a newline (\n) character. Perhaps you want this instead: tr/\015\012/\n/; > # it makes a lot of <new line> signs only one a time > tr/\n\r\f\t//s; You could combine the two transliterations. :-) tr/\015\012\n\r\f\t/\n\n\n\r\f\t/s; > # it counts all the posts > $posts ++ if /Newsgroups: it\..+/; > # it deletes the headers of each post > s/Newsgroups: it\..+|Subject: .+|Date: .+|Message-ID: .+|References: > ..+|From: .+/\n/g; Or: $posts++ if s/^Newsgroups: it\..+//; s/^(?:Subject|Date|Message-ID|References|From):.+/\n/s; > # THIS ONE DOESN'T WORKS!!! it should count all the lines except the > lines of division of each post (========\n) > $line4post ++ if (/\n/ and $´ !~ /={8}/); $line4post++ unless /={8}\n/; > } > print $posts, " posts in ", $line4post, " lines.\nThe mean is ", > $line4post / $posts, " lines for post.\n"; > > close(INPUT); > > someone knows why for each line of text.txt the Terminal tells me: "Use > of uninitialized value in pattern match (m//) at [...]" and how can I ^^^^^ At what? Please include the _complete_ warning/error message. > avoid it? John -- use Perl; program fulfillment -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]