scarmalt has asked for the wisdom of the Perl Monks concerning the following question:

I've just installed Strawberry Perl (64-bit) on my Win-7 machine. I'm pretty facile with Perl on Linux, but Windows is different.
First program:

use IO::File; my $infile = IO::File->new("c:\\Users\\account\\My Documents\\test.txt + |"); my $nolines while ($instring = $infile->getline() ) { $nolines++; } print '$nolines = ' . $nolines . "\n"; 1;

When I run this in cmd  >perl test.pl, it opens my file (test.txt) in Notepad instead of counting the lines.
What have I done wrong?

Thanks

Replies are listed 'Best First'.
Re: Strawberry perl on Win 7 (64-bit)
by ikegami (Patriarch) on Nov 03, 2015 at 15:17 UTC
    You used the "program |" syntax, which makes the returned handle a pipe of the output of the program.

    Change

    my $infile = IO::File->new("c:\\...\\test.txt |");

    to

    my $infile = IO::File->new("c:\\...\\test.txt");
Re: Strawberry perl on Win 7 (64-bit)
by Discipulus (Canon) on Nov 04, 2015 at 08:07 UTC
    ..which makes the returned handle a pipe of the output of the program.

    Ie the output of the default program associated (in the registry) to the .txt file extension.
    The ikegami suggestion assume that you want open a file for reading, as you shows in you code; the read mode is the default when opening files, with or without IO::File. Anyway i think is preferable to specify always the mode:
    $file=IO::File->new('c:/scripts/002.txt'); # is the same of $file=IO::File->new('c:/scripts/002.txt','<'); #as open my $fh, 'c:/scripts/002.txt' or die "unable to open a fil +e to read"; # equal to open my $fh, '<', 'c:/scripts/002.txt' or die "unable to open a fil +e to read";
    As final tip see how i specified the path: even if untold you can always and safely use the same path separtor you would use in Linux with the benefit of less keystroke and perhaps a bit of portability more.

    UPDATE: as for searching the line number take a look to $. described in perlvar
    HtH
    L*
    There are no rules, there are no thumbs..
    Reinvent the wheel, then learn The Wheel; may be one day you reinvent one of THE WHEELS.