如何将Shell输入文件引入为Perl输入文件

时间:2019-02-08 10:25:33

标签: shell perl

尝试在我的Perl代码中插入bash变量时遇到了一些麻烦。 在Shell脚本中:-

_input_file     # contain input file name
_output_file    # contain output folder name

如何将输入文件和输出文件引入Perl脚本。因此,Perl脚本可以读取该输入文件。

2 个答案:

答案 0 :(得分:2)

以此启动您的Perl脚本:

#!/usr/bin/perl
use strict;
use warnings;

my $input_file = $ARGV[0]
   or die "usage: $0 <input file> <output file>\n";
my $output_file = $ARGV[1]
   or die "usage: $0 <input file> <output file>\n";

...然后您可以从shell脚本中这样调用它

"${_script_path}/my_perl.pl" "${_input_file}" "${_output_file}"

注意::如果只有一个输入文件和一个输出文件,则应该考虑编写一个过滤器,即从STDIN读取并写入STDOUT。然后您可以集成到这样的管道中

[command that generates input] | perl my_perl.pl | [command that consumes output]

答案 1 :(得分:2)

只要有可能,我建议将程序编写为Unix过滤器-即从STDIN读取并写入STDOUT。这样可以使您的程序尽可能灵活,并且通常更易于编写(因为避免了所有繁琐的文件打开操作)。

在Perl中,您可以使用<>来读取STDIN,而可以使用print()来写入STDOUT。因此,一种常见的方法如下所示:

#!/usr/bin/perl

use strict;
use warnings;

# While there is data available on STDIN
# Read a line and store it in $_
while (<>) {
  # Do something useful with the data in $_
  ...
  # Print $_ to STDOUT
  print;
}

然后,您只需要确保在调用程序时将STDIN和STDOUT连接到正确的文件即可。如果_input_file_output_file是环境变量,并且您的程序名为my_filter,则可以这样调用它:

my_filter < "$_input_file" > "$_output_file"