Saya sedang mengerjakan skrip Perl. Bagaimana saya bisa meneruskan parameter baris perintah ke sana?
Contoh:
script.pl "string1" "string2"
perl
command-line
lamcro
sumber
sumber
./script.pl
atau keseluruhan lotta nothin 'akan terjadi runtime.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
danGetOpt::Long
memprosesnya dengan mudah.GetOpt::Std
hanya mendukung sakelar satu karakter danGetOpt::Long
jauh lebih fleksibel. DariGetOpt::Long
: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
.sumber
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:Dari sini .
sumber
$#ARGV + 1
Anda juga bisa mengatakan@ARGV
ARGV[0]
atau$argv[1]
jika Anda mencari argumen tertentu.akan mencetak setiap argumen.
sumber
Atau, cara perlish yang lebih seksi .....
my ($src, $dest) = @ARGV;
"Asumsikan" dua nilai dilewatkan. Kode tambahan dapat memverifikasi anggapannya aman.
sumber
@ARGV
tanpa tindakan dari Anda seperti C / C ++ menyediakannya melalui argv / argcNamun pilihan lain adalah menggunakan perl -s, mis:
Kemudian panggil seperti ini:
Atau lihat artikel asli untuk lebih jelasnya:
sumber
Anda dapat mengaksesnya secara langsung, dengan menetapkan variabel khusus
@ARGV
ke daftar variabel. Jadi, misalnya:perl tmp.pl 1 2 3 4 5
sumber
Jika argumen adalah nama file yang bisa dibaca, gunakan operator berlian (<>) untuk mendapatkan isinya:
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:(Perhatikan bahwa melakukan ini dengan
shift
hanya akan berfungsi jika Anda berada di luar semuasub
. Dalam asub
, ia akan mengambil daftar argumen yang diteruskan kesub
bukan diteruskan ke program.)sumber
sumber
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 .
sumber