stdin - How to get file handler for reading real time input stream in perl script by ignoring the command line arguments -
i have perl script accepts command line arguments (file name) , should read input stream write file created using argument.
the problem statement while (<>), instead of waiting user input write file , tries open file. cannot use <stdin> because need call script java program
#!/usr/bin/perl use strict; use cgi; use cgi::carp qw ( fatalstobrowser ); use warnings; #store input parameter file_name $cfgfilename; $q = cgi->new(); $cfgfilename = $q->param('filename'); #open file , write input data open (out, "> /home/$cfgfilename") or die $!; print "content-type: text/plain\n\n"; while ( <>) { print out $_; } close (out); # pass status print "success"; exit 0;
i think you're labouring under misconception. input stream for program stdin. it's not global thing.
the "diamond operator" <> works this:
- if filenames specified arguments, opens them , 'streams' them through
stdin. - if no filenames specified, reads
stdin.
if don't want former apply, want read stdin. doesn't matter call program - stdin, stdout , stderr program specific 'pipe' | link 1 program's stdout next program's stdin.
most exec or system calls same thing.
you should avoid calling open - it's bad style. try instead:
open ( $output, ">", "/home/$cfgfilename" ) or die $!; and then:
print {$output} $_ by doing way:
- you lexically scope filehandles, you're not polluting namespace, , allow program detect , close when go out of scope.
- you avoid interpolation issues of variable names entirely (e.g. unwanted "pipe" "truncate" etc.).
Comments
Post a Comment