EDIT: Tolong, tolong , harap baca dua persyaratan yang tercantum di bagian bawah posting ini sebelum membalas. Orang-orang terus memposting permata dan perpustakaan baru mereka dan yang lainnya, yang jelas tidak memenuhi persyaratan.
Kadang-kadang saya ingin meretas beberapa opsi baris perintah dengan sangat murah menjadi skrip sederhana. Cara yang menyenangkan untuk melakukannya, tanpa berurusan dengan getopts atau parsing atau semacamnya, adalah:
...
$quiet = ARGV.delete('-d')
$interactive = ARGV.delete('-i')
...
# Deal with ARGV as usual here, maybe using ARGF or whatever.
Ini bukan sintaks opsi Unix yang normal, karena ini akan menerima opsi parameter baris perintah non-opsi, seperti dalam " myprog -i foo bar -q", tetapi saya bisa menerimanya. (Beberapa orang, seperti para pengembang Subversion, lebih suka ini. Terkadang saya juga melakukannya.)
Opsi yang baru saja ada atau tidak ada tidak dapat diterapkan lebih sederhana dari yang di atas. (Satu tugas, satu panggilan fungsi, satu efek samping.) Apakah ada cara yang sama sederhananya untuk menangani opsi yang menggunakan parameter, seperti " -f nama file "?
EDIT:
Satu hal yang tidak saya kemukakan sebelumnya, karena tidak menjadi jelas bagi saya sampai penulis Trollop menyebutkan bahwa perpustakaan tersebut sesuai "dalam satu file [800-baris]," adalah bahwa saya tidak hanya mencari yang bersih sintaks, tetapi untuk teknik yang memiliki karakteristik sebagai berikut:
Keseluruhan kode dapat dimasukkan ke dalam file skrip (tanpa membebani skrip itu sendiri, yang mungkin hanya beberapa lusin baris), sehingga seseorang dapat meletakkan satu file di
bindirektori pada sistem apa pun dengan standar Ruby 1.8 . [5-7] instalasi dan menggunakannya. Jika Anda tidak dapat menulis skrip Ruby yang tidak memiliki pernyataan require dan kode untuk mengurai beberapa opsi berada di bawah selusin baris atau lebih, Anda gagal dalam persyaratan ini.Kode ini kecil dan cukup sederhana sehingga orang dapat cukup mengingatnya untuk langsung mengetik kode yang akan melakukan trik, daripada memotong dan menempel dari tempat lain. Pikirkan situasi di mana Anda berada di konsol server yang di-firewall tanpa akses Internet, dan Anda ingin menggabungkan skrip cepat untuk digunakan klien. Saya tidak tahu tentang Anda, tetapi (selain gagal memenuhi persyaratan di atas) menghafal bahkan 45 baris mikro-optparse yang disederhanakan bukanlah sesuatu yang ingin saya lakukan.
getoptlongdan optparseberada di pustaka ruby standar, jadi Anda TIDAK PERLU menyalinnya saat menerapkan skrip Anda - jika ruby berfungsi pada mesin itu, maka require 'optparse'atau require 'getoptlong'akan berfungsi juga.