如何使用perl传递命令行参数和perl模块?

时间:2017-03-03 09:13:51

标签: perl

我使用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"

帮助我解决问题。

2 个答案:

答案 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生成的。