2013-10-30 5 views
0

У меня есть сценарий, который начинается с запроса пользователя для имени файла. Я хочу добавить функцию, чтобы я мог указать имя файла в командной строке даже перед запуском программы.Как вы вызываете пользовательский ввод с терминала

К точке: Если я начал свою программу с «Perl wordcounter.pl text.txt», Как я мог получить доступ к строке после имени программы (т.е. text.txt) из кода?

я начал делать что-то вроде:

$filename = "Filename supplied in the commandline"; 
if ($filename == 0) { 
    print "Word frequancy counter.\nEnter the name of the file that you wish to analyze.\n"; 
    chomp ($filename = <STDIN>); 
} 

В принципе, если не текстовый файл не поставлялся в командной строки, $ файла все равно 0, и тогда было бы продолжить просить файл.

Кто-нибудь знает, как я могу получить доступ к «Filename, предоставленному в командной строке» в коде?

ответ

2

попробуйте использовать массив @ARGV

$x1 = $ARGV[0] || 'NONE'; 
+0

Хмм испытал его и некоторые другие варианты, не повезло. –

+0

вы бы опубликовали, как вы его протестировали? – michael501

+0

@ARGV; $ filename = $ ARGV [0]; if ($ filename == 0) { \t chomp ($ filename = ); } –

1

хотя @ARGV является перспективным вариантом, но я предпочел бы использовать getopts здесь пример кода, который может быть использован в соответствии с вашими потребностями

попробовать этот Perl sample.pl -file text.txt и снова без аргументов файла Perl sample.pl

#!/usr/bin/perl 
use Getopt::Long; 

# setup my defaults 

GetOptions(
    'file=s' => \$file, 
    'help!'  => \$help, 
) or die "Incorrect usage!\n"; 

if($help) { 
    print "Common on, it's really not that hard.\n"; 
} else { 
    print "reading the $name.\n"; 
    if (-e $file){ 
     open(DATA ,'<',$file) or die "unable to open \$file = $file\n"; 
     while (<DATA>){ 
      print "$_\n"; 
     } 
    } else { 
     chomp ($file = <STDIN>); 
     open(DATA ,'<',$file) or die "unable to open \$file = $file\n"; 
     while (<DATA>){ 
      print "$_\n"; 
     } 

    } 
} 
~ 
Смежные вопросы