ฉันกำลังแปลเชลล์สคริปต์เป็นสคริปต์ Perl ที่ใช้ Getopt::Long และฉันต้องการรักษาความเข้ากันได้กับกรณีด้านล่าง โดยที่หากอาร์กิวเมนต์เดียวของสคริปต์คือไฟล์เดียว ไฟล์นั้นจะถูกใช้เป็นไฟล์ปรับแต่ง ในขณะที่ปกติคือการรับพารามิเตอร์เข้าสู่ GetoptLong
if [[ $# -eq 1 && -f $1 ]];
then
echo "Using config file $1"
[...]
else
if [ $# -lt 2 ]; then usage "INCORRECT NUMBER OF PARAMETERS"; fi
while getopts ":a:b:c:d:ef" opt;
do
[...]
ทางเลือกหนึ่งคือรักษา if/else
ไว้ในสคริปต์ Perl ดังนี้:
if (1 == @ARGV && -f $ARGV[0]) {
# use this config file
config_file_method($ARGV[0]);
} else {
# use GetOptions
GetOptions(
'a|foo:s' => \$foo,
'b|bar:s' => \bar,
[...]
);
}
แต่ฉันสงสัยว่ากรณีพิเศษนี้สามารถรวมไว้ในฟังก์ชัน GetOptions ได้หรือไม่:
GetOptions(
'if only one element in @ARGV' => 'call config_file_method($ARGV[0])',
'a|foo:s' => \$foo,
'b|bar:s' => \bar,
[...]
);
มีความคิดอะไรบ้าง?
==
เปรียบเทียบตัวเลข ตัวเลขเป็นสเกลาร์ ดังนั้น==
กำหนดจึงเป็นบริบทสเกลาร์ของ args ทุกกรณีของscalar
ที่คุณมีไม่มีประโยชน์ - person ikegami   schedule 26.09.2013