Jawaban:
Tergantung pada apa yang ingin Anda lakukan. Jika Anda ingin menggunakan dua argumen sebagai file input, Anda bisa meneruskannya dan kemudian gunakan <>
untuk membaca kontennya.
Jika mereka memiliki arti yang berbeda, Anda dapat menggunakan GetOpt::Std
dan GetOpt::Long
memprosesnya dengan mudah. GetOpt::Std
hanya mendukung sakelar satu karakter dan GetOpt::Long
jauh lebih fleksibel. Dari GetOpt::Long
:
use Getopt::Long;
my $data = "file.dat";
my $length = 24;
my $verbose;
$result = GetOptions ("length=i" => \$length, # numeric
"file=s" => \$data, # string
"verbose" => \$verbose); # flag
Atau, @ARGV
adalah variabel khusus yang berisi semua argumen baris perintah. $ARGV[0]
adalah argumen pertama (mis. "string1"
dalam kasus Anda) dan $ARGV[1]
argumen kedua. Anda tidak perlu modul khusus untuk mengakses @ARGV
.
Contains the name of the current file when reading from <> .
Anda meneruskannya persis seperti yang Anda pikirkan, dan dalam skrip Anda, Anda mendapatkannya dari array @ARGV
. Seperti itu:
my $numArgs = $#ARGV + 1;
print "thanks, you gave me $numArgs command-line arguments.\n";
foreach my $argnum (0 .. $#ARGV) {
print "$ARGV[$argnum]\n";
}
Dari sini .
$#ARGV + 1
Anda juga bisa mengatakan@ARGV
ARGV[0]
atau $argv[1]
jika Anda mencari argumen tertentu.
foreach my $arg (@ARGV) {
print $arg, "\n";
}
akan mencetak setiap argumen.
Atau, cara perlish yang lebih seksi .....
my ($src, $dest) = @ARGV;
"Asumsikan" dua nilai dilewatkan. Kode tambahan dapat memverifikasi anggapannya aman.
@ARGV
tanpa tindakan dari Anda seperti C / C ++ menyediakannya melalui argv / argc
Namun pilihan lain adalah menggunakan perl -s, mis:
#!/usr/bin/perl -s
print "value of -x: $x\n";
print "value of -name: $name\n";
Kemudian panggil seperti ini:
% ./myprog -x -name=Jeff
value of -x: 1
value of -name: Jeff
Atau lihat artikel asli untuk lebih jelasnya:
Jika argumen adalah nama file yang bisa dibaca, gunakan operator berlian (<>) untuk mendapatkan isinya:
while (my $line = <>) {
process_line($line);
}
Jika argumennya adalah opsi / switch, gunakan GetOpt :: Std atau GetOpt :: Long, seperti yang sudah ditunjukkan oleh slavy13.myopenid.com.
Jika itu sesuatu yang lain, Anda dapat mengaksesnya dengan berjalan melalui @ARGV secara eksplisit atau dengan shift
perintah:
while (my $arg = shift) {
print "Found argument $arg\n";
}
(Perhatikan bahwa melakukan ini dengan shift
hanya akan berfungsi jika Anda berada di luar semua sub
. Dalam a sub
, ia akan mengambil daftar argumen yang diteruskan kesub
bukan diteruskan ke program.)
my $output_file;
if((scalar (@ARGV) == 2) && ($ARGV[0] eq "-i"))
{
$output_file= chomp($ARGV[1]) ;
}
Jika Anda hanya ingin beberapa nilai, Anda bisa menggunakan array @ARGV. Tetapi jika Anda mencari sesuatu yang lebih kuat untuk melakukan pemrosesan opsi baris perintah, Anda harus menggunakan Getopt :: Long .
./script.pl
atau keseluruhan lotta nothin 'akan terjadi runtime.