in reply to print the output on the screen and to a file

Where does the output come from is this an output of your perl program? If yes just use multiple print statements:
open my $out_file, '>>', 'myoutputfilename.txt' or die "$!"; my $output = 'blablabla'; print $output; # print to screen print $out_file $output; # print to file
UPDATE: corrected some typos and added the die statement to open

Replies are listed 'Best First'.
Re^2: print the output on the screen and to a file
by rkshyam (Acolyte) on Mar 30, 2012 at 11:49 UTC

    should I to use 2 seperate print statement each time I need to print? There will be many such statements. Can't I use single print statement which prints to the screen and to the file simultaneously as I have the option in UNIX with | tee option?

      You can install a gnu version of tee.exe on your Windows machine or just use your own tee. You like tee, so just use tee.

      Update: I tried using tee command here too but didnt work - the below works on my Windows machine.
      tee.pl

      #!usr/bin/perl -w use strict; $|=1; #turn autoflush on sub usage () { print "TEE USAGE:\n". " program | tee outfile\n". " sends stdout from program to outfile\n"; exit; } my $filename = shift @ARGV; usage unless $filename; open (OUTFILE, ">", "$filename") or (die "Can't open OUTFILE: $!"); while (<>) { print; print OUTFILE; }
      Update: In your program, unbuffer stdout. There is no need for the eval. There can be issues about how to run a perl program on Windows without having to say "perl" explictly - but that's a different subject (and this is possible to do).
      #!/usr/bin/perl -w use strict; $|=1; #unbuffer stdout print "File split start time is ", scalar localtime();
      prints: C:\TEMP>perl test.pl | perl tee.pl xxxxx File split start time is Fri Mar 30 05:57:41 2012 C:\TEMP>type xxxxx File split start time is Fri Mar 30 05:57:41 2012 C:\TEMP>