我正在处理一个应该将信息输出到命令行的perl脚本,但我希望能够创建一个文件并将信息打印到它上面。 基本上我想用另一个将信息写入文件并将其存储在文件中的语句替换print语句。
foreach(my $i=0; $i < scalar(@netstat_array); $i++)
{
if($netstat_array[$i]{"protocol_name"} eq $protocol_name_input)
{
print $netstat_array[$i]{"protocol_name"};
print ";";
print $netstat_array[$i]{"local_address"};
print ";";
print $netstat_array[$i]{"port_number"};
print ";";
print $netstat_array[$i]{"listening_device"};
print ";";
print $netstat_array[$i]{"process_identifier"};
print ";";
print $netstat_array[$i]{"process_name"};
print "\n";
}
}
感谢任何帮助。
答案 0 :(得分:3)
三种选择:
打印到新的文件句柄。
在循环外打开文件。
open my $out_fh, '>', 'your_file_name' or die $!;
然后更改所有打印语句以打印到新文件句柄。
print $out_fh $netstat_array[$i]{"protocol_name"}; #etc...
更改默认文件句柄。
打开文件句柄,如上例所示。但是,请调用select
来更改print
默认使用的文件句柄。
select $out_fh;
这样您根本不需要更改print
语句。
根本不要更改您的代码。在调用程序时,使用操作系统的I / O重定向功能将STDOUT
重定向到文件。
$ ./your_program.pl > your_output_file
更新:想到一种更好的方式来完成所有打印。
my @cols = qw[protocol_name local_address port_number
listening_device process_identifier process_name];
foreach my $i (0 .. $#netstat_array) { # much easier to understand
if($netstat_array[$i]{"protocol_name"} eq $protocol_name_input) {
# Hash slices are cool!
print join ';', @{$netstat_array[$i]}{@cols};
}
}
答案 1 :(得分:0)
print
打印到文件句柄,如果未明确指定,则默认为STDOUT。
print "Hello, world!"
与print STDOUT "Hello, world!"
相同。请注意,STDOUT和要打印的字符串之间没有逗号(所谓的间接对象语法)。
您可以使用open(my $fh, '>', 'output.txt');
创建自己的文件句柄,并使用print $fh "Hello, world!"
代替print "Hello, world!"
。
答案 2 :(得分:-1)
使用这个子程序,这是一个简单的方法
sub save {
my ($file,$item) = @_;
open(SAVE,">>".$file);
print SAVE $item."\n";
close(SAVE);
}
只需使用save($file_to_save,$text_to_save);
例如,您可以打印$netstat_array[$i]{"protocol_name"}
在这样的1.txt文件中:
save ("1.txt",$netstat_array[$i]{"protocol_name"});