perl:强制使用命令行标志?
问题描述:
我经常写在命令行上的俏皮话像这样:perl:强制使用命令行标志?
perl -Magic -wlnaF'\t' -i.orig -e 'abracadabra($_) for (@F)'
为了scriptify这一点,我可以通过相同的标志的家当行:
#!/usr/bin/perl -Magic -wlnaF'\t' -i.orig
abracadabra($_) for (@F);
然而,有两家这个问题。首先,如果有人通过将脚本直接传递给perl来调用该脚本(如'perl script.pl',而不是'./script.pl'),则标志被忽略。此外,我不能使用“/ usr/bin/env perl”,因为显然我不能在使用env调用它时将参数传递给perl,所以我不能使用不同的perl安装。
有反正告诉脚本“嘿,总是运行,就像你用-wlnaF'\ t'-i.orig'调用?
答
你对perl script.pl
版本不正确; Perl专门查找并解析#!
行中的选项,即使在非Unix上,如果作为脚本而不是直接运行。
对于开关,
#!
行总是被检查,因为该行正被解析为 。因此,如果您所在的计算机只允许一个参数 与#!
一行,或者更糟糕的是,甚至不会识别#!
行,但无论Perl调用了多少个Perl ,您的 仍可以获得一致的切换行为,即使-x
被用来找到程序的开始。
(...)
的
#!
开关的解析开始无论perl
在 线被提及。序列“ - *”和“ - ”是专门被忽略,这样你可以 ,如果你是这样的倾向,说#!/bin/sh #! -*-perl-*- eval 'exec perl -x -wS $0 ${1+"[email protected]"}' if 0;
让Perl中看到-p开关。
现在,以上报价预计perl -x
,但如果你用启动脚本它的作品一样好
#! /usr/bin/env perl -*-perl -p-*-
(有足够的字符来让过去的32个字符的限制与该限制系统;详情请参阅perldoc perlrun
,以及上面引用的其他内容)。
Perl重新扫描#!不管它如何被调用。 – tchrist 2011-04-05 23:08:44
是的,但是一旦你使用'chmod + x''d它就不会有太多的工作。 – tchrist 2011-04-05 23:16:09