There are a few problems with that version of the script as posted:
- You should have just used a normal "open" statement instead of calling a subroutine that isn't defined.
- In my case at least (perl 5.8.6), the use open OUT => ":utf8" has no effect on the setting of STDOUT (which is already open when the script starts); I would use binmode STDOUT, ":utf8"
- You are reading the data file one line at a time, but your regex is trying to match a pattern that spans two lines, so the regex can never match successfully; you would either use two separate matches (one for each line), or else slurp the whole file into a single scalar in a single read operation (but that would change a lot of things).
Here's a version that prints the matches, and the output is definitely valid utf8. If the results look wrong when you run it, that probably means you are using a display window that does not support utf8 characters.
#!/usr/bin/perl -w
use strict;
use Getopt::Std;
our ($opt_f);
getopts('f:');
if($opt_f){
open( FILE, "<:encoding(cp1252)", $opt_f);
binmode STDOUT, ":utf8";
while (my $line = <FILE>) {
chomp ($line);
print "$line\n";
if ($line=~ /Number\s+of\s+Observations\s+Used\s+(\d+)/ or
$line=~ /(État)/){
print "$1\n";
}
}
}