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::Stddan GetOpt::Longmemprosesnya dengan mudah. GetOpt::Stdhanya mendukung sakelar satu karakter dan GetOpt::Longjauh 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, @ARGVadalah 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 + 1Anda 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.
@ARGVtanpa 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 shiftperintah:
while (my $arg = shift) {
print "Found argument $arg\n";
}
(Perhatikan bahwa melakukan ini dengan shifthanya 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.platau keseluruhan lotta nothin 'akan terjadi runtime.