如何在Perl中打印文件?

时间:2015-08-06 14:54:40

标签: perl

我正在处理一个应该将信息输出到命令行的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";
        }
    }     

感谢任何帮助。

3 个答案:

答案 0 :(得分:3)

三种选择:

  1. 打印到新的文件句柄。

    在循环外打开文件。

    open my $out_fh, '>', 'your_file_name' or die $!;
    

    然后更改所有打印语句以打印到新文件句柄。

    print $out_fh $netstat_array[$i]{"protocol_name"}; #etc...
    
  2. 更改默认文件句柄。

    打开文件句柄,如上例所示。但是,请调用select来更改print默认使用的文件句柄。

    select $out_fh;
    

    这样您根本不需要更改print语句。

  3. 根本不要更改您的代码。在调用程序时,使用操作系统的I / O重定向功能将STDOUT重定向到文件。

    $ ./your_program.pl > your_output_file
    
  4. 更新:想到一种更好的方式来完成所有打印。

    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"});