尝试在我的Perl代码中插入bash变量时遇到了一些麻烦。 在Shell脚本中:-
_input_file # contain input file name
_output_file # contain output folder name
如何将输入文件和输出文件引入Perl脚本。因此,Perl脚本可以读取该输入文件。
答案 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"