2015-10-23 4 views
1

Как использовать аргумент командной строки в Perl для ввода ввода файла от пользователя? Может быть: wxp.pl - file {file path}.
Я новичок в Perl, поэтому предлагаю мне что-нибудь полезное. И как я могу сделать это как более чем один аргумент, который нужно задать в командной строке. например:Более одного ввода командной строки в perl с использованием argV

exp.pl -file {file path} 
      -x {it's arg} 
      -y {y's arg} 

ответ

2

Если вы хотите просто передать аргументы, вы можете сделать так:

perl exp.pl arg1 agr2 

Если вы хотите что-то более, используйте Getopt::Long модуль.

+0

Ohhk спасибо, что я должен посмотреть это ** Getopt :: Long ** потому что я понятия не имею, как это сделать в новом Perl, который вы знаете. –

+2

Просто взгляните и попытайтесь сделать это самостоятельно, и если вы столкнетесь с какой-либо проблемой, приходите сюда с вашими попытками. Мы рады помочь вам. – serenesat

+0

Согласен! Спасибо serene .. –

1

Я бы предложил GetOpt :: Долго для достижения этого. Но если вы хотите сделать свой собственный посмотреть, если что-то подобное было бы удобно:

use strict; 
use warnings; 

# Usage check. For "perl xxx.pl -a arg1 -b arg2" args. should be even nos. 

if (scalar @ARGV == 0 or scalar @ARGV % 2 != 0) { 
    print "Usage:\n\t$0 -a arg1 -b arg2 requires all args\n"; 
    exit 0; 
} 

# This one convert cmd line args. to hash ex. (perl xxx.pl -a arg1 -b arg2) to {-a => arg1, -b => arg2} 
my %argHash = @ARGV;  

# Optional but see if all the args are present 
my $maxArgs = 2; 
if (scalar keys %argHash != $maxArgs) { 
    print "Usage:\n\t$0 -a arg1 -b arg2 requires exactly $maxArgs args\n"; 
    exit 0; 
} 

# Parse arguments. 
print "$0:\n"; 
for my $key (keys %argHash) { 
    print "\t $key: $argHash{$key}\n"; 
} 

1; 

Результат:

c:\swadhi\perl>perl cmdline.pl 
Usage: 
     cmdline.pl -a arg1 -b arg2 requires all args 

c:\swadhi\perl>perl cmdline.pl -a "user" -b 
Usage: 
     cmdline.pl -a arg1 -b arg2 requires all args 

c:\swadhi\perl>perl cmdline.pl -a "user" -b "Command" 
cmdline.pl: 
     -a: user 
     -b: Command 

c:\swadhi\perl>perl cmdline.pl -a "user" -b "Command" -c "mock" 
Usage: 
     cmdline.pl -a arg1 -b arg2 requires exactly 2 args 

c:\swadhi\perl>perl cmdline.pl -a "user" 
Usage: 
     cmdline.pl -a arg1 -b arg2 requires exactly 2 args 
1

Более простой Getopt :: Длинная версия

use strict; 
use warnings; 
use Getopt::Long qw(GetOptions); 

my $user_name; 

GetOptions('user=s' => \$user_name) or die "Usage: $0 --user NAME\n"; 

if ($user_name) { 
    print $user_name, "\n"; 
} 

Результат:

c:\swadhi\perl>perl cmdline.pl -user Swadhi 
Swadhi 

c:\swadhi\perl>perl cmdline.pl 

c:\swadhi\perl>perl cmdline.pl -p s 
Unknown option: p 
Usage: cmdline.pl --user NAME 

c:\swadhi\perl>perl cmdline.pl -u "This should also work" 
This should also work 
+0

ну, я постараюсь использовать это в своем решении и спасибо. Хотя я работаю над модулем электронной почты, в котором я хочу ввести идентификаторы электронной почты в качестве аргумента, поэтому с тем, что он отправит почту на этот идентификатор и я использую mail :: outlook для этого. –

+0

Несомненно. Я бы порекомендовал вам практиковать его для более полного понимания и оставил его с очень простым примером. Не унывайте! :) –