我使用perl?
通过命令行参数传递输入和输出文件上一个例子:
[Is it possible to add the file out in the File::Find::Rule using perl?
我试图将输入和输出文件添加为命令行参数的代码:(generate.pl
)。我已经知道如何包含命令行参数来读取和复制文件以及perl模块。
use strict;
use warnings 'all';
use CGI qw(:all);
#generate the user file arguments
use Getopt::Long 'GetOptions';
use File::Path qw( make_path );
use File::Copy qw( copy move);
use File::Find::Rule qw( );
GetOptions(
'prjroot=s' => \my $input_dir,
'outdir=s' => \my $output_dir,
);
my %created;
for my $in (
File::Find::Rule
->file()
->name(qr/^[^.].*\.yfg$/)
->in($input_dir)
) {
my $match_file = substr($in, length($input_dir) + 1);
my ($match_dir) = $match_file =~ m{^(.*)/} ? $1 : '.';
my $out_dir = $output_dir . '/' . $match_dir;
my $out = $output_dir . '/' . $match_file;
make_path($out_dir) if !$created{$out_dir}++;
copy($in, $out);
}
发生错误:
./generate.pl: line 1: use: command not found
./generate.pl: line 2: use: command not found
./generate.pl: line 3: syntax error near unexpected token `('
./generate.pl: line 3: `use CGI qw(:all);'
perl执行应该如下:
我应该将内容从一个目录复制到另一个目录以及perl modulES(I.E File :: Find :: Rule)
./generate.pl -prjroot "/home/bharat/DATA" -outdir "/home/bharat/DATA1"
帮助我解决问题。
答案 0 :(得分:1)
你错过了第一行的perl评论:
#!<path_to_perl>/perl
use strict;
use warnings 'all';
use CGI qw(:all);
#generate the user file arguments
.....
如果您在命令前面使用perl Interpreter调用它,您的程序也会起作用:
perl ./generate.pl -prjroot "/home/bharat/DATA" -outdir "/home/bharat/DATA1"
答案 1 :(得分:1)
您已经看到了问题所在。但我只是补充一点,perldoc perldiag为您从Perl获得的任何错误消息提供了很好的解释。在这种情况下,搜索未找到&#34;命令&#34;会给你这个:
%s:找不到命令
(A)您不小心通过csh或其他shell而不是Perl运行脚本。检查 #!行,或自己手动将脚本输入Perl。 #!文件顶部的行可能看起来像
#!/usr/bin/perl -w
这个特别令人印象深刻,因为这个错误实际上并不是由Perl生成的 - 而是由你的shell生成的。