2015-09-30 5 views
0

Я хочу провести разбор аргумента командной строки для пути к каталогу в perl. Я хочу сделать этот аргумент как необязательный. поэтому, когда пользователь дает путь, он должен быть назначен переменной $ release_model, иначе он выполнит другой код, который я написал для поиска каталога из основного каталога. Я новичок в perl, но так или иначе закодирован. Может ли кто-нибудь помочь?Как добавить необязательный аргумент в perl

Getopt::Long 
my $command_line = $GetOptions(\%Opts, "help|h","[email protected]","test","model"); 
if($command_line==0){ 
print "$PROGRAM: no arguments are given"; 
Usage{}; 
} 
else die "No arguments were given" 

Но он не принимает модель в качестве необязательного аргумента и вызывает ошибку.

Я только начал работать с perl.

+2

«Бросает ошибку» не является полезным диагностическим сообщением. Какая ошибка? Конструкция '$ GetOptions (...)' '' '' выглядит как ошибка. Это реальный код? Голый «Getopt :: Long» (no semicolon? Not 'use Getopt :: Long;'?) Также выглядит как ошибка. – mob

+0

hi mob, да это настоящий код. Я новичок в Perl. никогда раньше не работал с perl. –

+2

Тогда почему вы существенно отклонились от кода в [документации] (http://search.cpan.org/perldoc?Getopt::Long)? См. Код в Сводке. – ikegami

ответ

1

Довольно сложно догадаться, что именно после вас, поскольку предоставленный код содержит много ошибок и других функций, которые не описаны. Но чтобы начать учиться с чего-то простого, вот что-то, что, я надеюсь, соответствует вашим требованиям.

#!/usr/bin/perl 

use strict; 
use warnings; 

use Getopt::Long; 

my $release_model = '/path/to/"main directory"'; # default value 

GetOptions('model=s' => \$release_model) 
    or die("Error in command line arguments\n"); 

print "Release model is: $release_model\n"; 

Если сохранить это в файл (например, my_program.pl) и сделать его исполняемым, то вы можете видеть, что предоставляет следующие возможности:

  1. При вызове без аргументов ./my_program.pl, значение по умолчанию $release_model будет использован.
  2. Если вы вызываете это с аргументом model (например, ./my_program.pl --model /another/directory), предоставленное значение будет присвоено $release_model.
  3. Если вы вызываете его с неправильными аргументами (например, ./my_program.pl --mdoel), он печатает разумное сообщение об ошибке и завершает работу.

Попробуйте сами. И пойдите и прочитайте учебник по Perl, если вы хотите сделать серьезную работу.