Як дадаць ключ -v без неабходнасці перамыкача для файла з дапамогай Getopt?

Я хачу, каб мець магчымасць запусціць свой сцэнар у адным з двух спосабаў:

perl script.pl file  
perl script.pl -v file 

Я ведаю, як гэта зрабіць

perl script.pl -v -f file 

Але я хачу зрабіць гэта без неабходнасці ў -f для файла.

0
Ці можаце вы паказаць, што вы спрабавалі і даць памылкі, якія вы бачылі?
дададзена аўтар gpojd, крыніца
Ці можаце вы паказаць, што вы спрабавалі і даць памылкі, якія вы бачылі?
дададзена аўтар gpojd, крыніца

8 адказы

Пасля выкарыстання Getopt , астатнія элементы ў @ARGV Вашы пазіцыйныя параметры. Вам проста трэба выкарыстоўваць $ ARGV [0] для "файла".

use Getopt::Long;

my $verbose = 0;
my %opts = ( 'verbose' => \$verbose );
GetOptions(\%opts, 'verbose|v') or die "Incorrect options";
my $file = $ARGV[0];
die "You must provide a filename" unless length $file;
3
дададзена
@gpojd фіксаванай, дзякуй
дададзена аўтар jordanm, крыніца
Вы таксама можаце сказаць , калі даўжыня $ файл , калі вы не маеце нешта супраць файлаў з імем 0 .
дададзена аўтар cjm, крыніца
Гэта Getopt :: Long , а не Getopt :: Long .
дададзена аўтар gpojd, крыніца

Пасля выкарыстання Getopt , астатнія элементы ў @ARGV Вашы пазіцыйныя параметры. Вам проста трэба выкарыстоўваць $ ARGV [0] для "файла".

use Getopt::Long;

my $verbose = 0;
my %opts = ( 'verbose' => \$verbose );
GetOptions(\%opts, 'verbose|v') or die "Incorrect options";
my $file = $ARGV[0];
die "You must provide a filename" unless length $file;
3
дададзена
@gpojd фіксаванай, дзякуй
дададзена аўтар jordanm, крыніца
Вы таксама можаце сказаць , калі даўжыня $ файл , калі вы не маеце нешта супраць файлаў з імем 0 .
дададзена аўтар cjm, крыніца
Гэта Getopt :: Long , а не Getopt :: Long .
дададзена аўтар gpojd, крыніца

Пасля выкарыстання Getopt , астатнія элементы ў @ARGV Вашы пазіцыйныя параметры. Вам проста трэба выкарыстоўваць $ ARGV [0] для "файла".

use Getopt::Long;

my $verbose = 0;
my %opts = ( 'verbose' => \$verbose );
GetOptions(\%opts, 'verbose|v') or die "Incorrect options";
my $file = $ARGV[0];
die "You must provide a filename" unless length $file;
3
дададзена
@gpojd фіксаванай, дзякуй
дададзена аўтар jordanm, крыніца
Вы таксама можаце сказаць , калі даўжыня $ файл , калі вы не маеце нешта супраць файлаў з імем 0 .
дададзена аўтар cjm, крыніца
Гэта Getopt :: Long , а не Getopt :: Long .
дададзена аўтар gpojd, крыніца

Вы можаце выкарыстоўваць аргумент зваротнага выкліку Getopt :: Лонга :

use Getopt::Long;                                                                                                                                                                                          

my $file;                                                                                                                                                                                                  
GetOptions(                                                                                                                                                                                                
    'v' => \my $v,                                                                                                                                                                                         
    '<>' => sub { $file = shift },                                                                                                                                                                         
);                                                                                                                                                                                                         

print "\$v: $v\n";                                                                                                                                                                                         
print "\$file: $file\n"; 

Каманда Perl script.pl -v foo.txt выхады:

$v: 1
$file: foo.txt
2
дададзена

Вы можаце выкарыстоўваць аргумент зваротнага выкліку Getopt :: Лонга :

use Getopt::Long;                                                                                                                                                                                          

my $file;                                                                                                                                                                                                  
GetOptions(                                                                                                                                                                                                
    'v' => \my $v,                                                                                                                                                                                         
    '<>' => sub { $file = shift },                                                                                                                                                                         
);                                                                                                                                                                                                         

print "\$v: $v\n";                                                                                                                                                                                         
print "\$file: $file\n"; 

Каманда Perl script.pl -v foo.txt выхады:

$v: 1
$file: foo.txt
2
дададзена

Getopt::Long parses (by default) the items in @ARGV and removes these items one-by-one as it processes @ARGV. After Getoptions finishes, the first item remaining in @ARGV will be the file name:

use warnings;
use strict;
use Getopt::Long;

my $verbose;

GetOptions (
    'v'  =>  "\$verbose",
) або die qq(Invalid arguments passed);

my $file = shift;  #Assuming a single file. Could be multiple
if ( $verbose ) {
    print "Do something verbosely\n";
}
else {
    print "Do it the nабоmal way...\n";
}

Нічога асаблівага не патрабуецца. Вы дазваляеце GetOptions для апрацоўкі -v параметр, калі ён існуе, і вы дазваляеце @ARGV змяшчае ўсе параметры, якія засталіся пасля таго, як < код> GetOptions заканчвае выкананне.

Дарэчы, вы можаце зрабіць гэта:

GetOptions (
    'verbose'  =>  "\$verbose",
) або die qq(Invalid arguments passed);

І вы маглі бы выкарыстаць:

perl script.pl -v file 

або     Perl script.pl -verbose файл

або

perl script.pl -verb file

Because, by default, GetOptions will auto_abbreviate the parameters and figure out what parameters the user is attempting to pass.

I highly recommend you look at the documentation and play around with it a bit. There will be a lot of stuff that won't quite make sense to you, but this is probably one of the earliest modules that new Perl programmers start to use, and it is full of all sабоts of neat stuff.

І працягвайце ісці назад і перачытайце дакументацыю, як вашы навыкі распрацоўкі, таму што вы знойдзеце новы матэрыял у гэтым модулі, як ваша разуменне павялічваецца Perl.

0
дададзена

Getopt::Long parses (by default) the items in @ARGV and removes these items one-by-one as it processes @ARGV. After Getoptions finishes, the first item remaining in @ARGV will be the file name:

use warnings;
use strict;
use Getopt::Long;

my $verbose;

GetOptions (
    'v'  =>  "\$verbose",
) або die qq(Invalid arguments passed);

my $file = shift;  #Assuming a single file. Could be multiple
if ( $verbose ) {
    print "Do something verbosely\n";
}
else {
    print "Do it the nабоmal way...\n";
}

Нічога асаблівага не патрабуецца. Вы дазваляеце GetOptions для апрацоўкі -v параметр, калі ён існуе, і вы дазваляеце @ARGV змяшчае ўсе параметры, якія засталіся пасля таго, як < код> GetOptions заканчвае выкананне.

Дарэчы, вы можаце зрабіць гэта:

GetOptions (
    'verbose'  =>  "\$verbose",
) або die qq(Invalid arguments passed);

І вы маглі бы выкарыстаць:

perl script.pl -v file 

або     Perl script.pl -verbose файл

або

perl script.pl -verb file

Because, by default, GetOptions will auto_abbreviate the parameters and figure out what parameters the user is attempting to pass.

I highly recommend you look at the documentation and play around with it a bit. There will be a lot of stuff that won't quite make sense to you, but this is probably one of the earliest modules that new Perl programmers start to use, and it is full of all sабоts of neat stuff.

І працягвайце ісці назад і перачытайце дакументацыю, як вашы навыкі распрацоўкі, таму што вы знойдзеце новы матэрыял у гэтым модулі, як ваша разуменне павялічваецца Perl.

0
дададзена

Getopt::Long parses (by default) the items in @ARGV and removes these items one-by-one as it processes @ARGV. After Getoptions finishes, the first item remaining in @ARGV will be the file name:

use warnings;
use strict;
use Getopt::Long;

my $verbose;

GetOptions (
    'v'  =>  "\$verbose",
) або die qq(Invalid arguments passed);

my $file = shift;  #Assuming a single file. Could be multiple
if ( $verbose ) {
    print "Do something verbosely\n";
}
else {
    print "Do it the nабоmal way...\n";
}

Нічога асаблівага не патрабуецца. Вы дазваляеце GetOptions для апрацоўкі -v параметр, калі ён існуе, і вы дазваляеце @ARGV змяшчае ўсе параметры, якія засталіся пасля таго, як < код> GetOptions заканчвае выкананне.

Дарэчы, вы можаце зрабіць гэта:

GetOptions (
    'verbose'  =>  "\$verbose",
) або die qq(Invalid arguments passed);

І вы маглі бы выкарыстаць:

perl script.pl -v file 

або     Perl script.pl -verbose файл

або

perl script.pl -verb file

Because, by default, GetOptions will auto_abbreviate the parameters and figure out what parameters the user is attempting to pass.

I highly recommend you look at the documentation and play around with it a bit. There will be a lot of stuff that won't quite make sense to you, but this is probably one of the earliest modules that new Perl programmers start to use, and it is full of all sабоts of neat stuff.

І працягвайце ісці назад і перачытайце дакументацыю, як вашы навыкі распрацоўкі, таму што вы знойдзеце новы матэрыял у гэтым модулі, як ваша разуменне павялічваецца Perl.

0
дададзена