首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

我可以将@ARGV和选项传递给通过do调用的perl脚本吗?

在Perl中,@ARGV 是一个特殊的数组,它包含了传递给Perl脚本的所有命令行参数。当你使用 do 语句来执行另一个Perl脚本时,@ARGV 数组不会自动包含那些脚本的命令行参数。不过,你可以通过几种方法来传递参数和选项给 do 调用的脚本。

方法1:手动设置 @ARGV

你可以在调用 do 之前手动设置 @ARGV 数组,包含你想要传递给被调用脚本的参数。

代码语言:javascript
复制
my @args = ('arg1', 'arg2', 'option=value');
@ARGV = @args;
do 'another_script.pl';

方法2:使用 systemexec

如果你需要更复杂的参数处理或者想要捕获被调用脚本的输出,你可以考虑使用 systemexec 函数。

代码语言:javascript
复制
my @args = ('arg1', 'arg2', 'option=value');
system('perl', 'another_script.pl', @args);

或者

代码语言:javascript
复制
my @args = ('arg1', 'arg2', 'option=value');
exec('perl', 'another_script.pl', @args);

方法3:使用 backticksqx//

如果你想要捕获被调用脚本的输出,可以使用反引号(backticks)或者 qx// 操作符。

代码语言:javascript
复制
my @args = ('arg1', 'arg2', 'option=value');
my $output = `perl another_script.pl @args`;
print $output;

或者

代码语言:javascript
复制
my @args = ('arg1', 'arg2', 'option=value');
my $output = qx(perl another_script.pl @args);
print $output;

方法4:使用模块

还有一些Perl模块可以帮助你更方便地处理脚本参数,例如 Getopt::LongPod::Usage。这些模块可以在主脚本中使用,也可以在被调用的脚本中使用。

在主脚本中:

代码语言:javascript
复制
use Getopt::Long;

my @args = ('arg1', 'arg2', 'option=value');
my $result = system('perl', 'another_script.pl', @args);

在被调用的脚本 another_script.pl 中:

代码语言:javascript
复制
use Getopt::Long;

my ($option);
GetOptions('option=s' => \$option);

# 处理参数...
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Linux:进程替换

(2)找到程序后的下一个问题就是我们要如何去执行这个程序,所以就设计到了要不要涵盖选项,以及这个选项应该以vector的形式传还是list的形式传。 (3)这个程序我一定要用该进程的环境变量吗??...我可不可以自己传一套环境变量进去? 所以有就了le系列。  ...,然后再调用main函数的时候将argc参数传递给程序,其实就相当于是你在执行该程序之前,优先给你加载出来一个栈帧结构。...(1)任何语言都有像exec这类的接口 (2)语言可以互相调用的原因是 无论是什么语言写的程序 在操作系统看来都是进程 1.5.3 将命令行参数和环境变量传递给另一个程序  环境变量是在子进程创建的时候就默认继承了...、本地变量表、内建命令方法…… 当我们输入的指令执行解析的时候,对于内建命令直接调用函数,非内建命令用子进程执行,执行过程中获取子进程的退出码,父进程等待,然后最后可以将退出码赋予给lastcode,这样方便用户通过

13410

使用Perl的File::Path模块删除非空文件夹

之前写过用perl删除Windows下的图片缓存缩略图(Thumbs.db) 不过那个只是针对单个的文件,使用unlink方法就可以了(未测试过只读文件删除的情况- -!)...下处理的较好,windows下未进行测试) 我选择了第二种方案,使用File::Path模块,点击查看详情>> 之前对Perl的操作符总结的并不好,这里小结一下: 1、比较运算符 ?...特殊说明:操作符和其命名在运算时是完全等价的,但是有不同的优先级。操作符有更高的优先级。例如 && 比 and 有更高的优先级。...如何在调用的时候,例如这样:perl del.pl path 就是path在调用的时候才传进去呢?用$ARGV[0] 就可以得到,调用之前判断一下。 1: #!...,如c:\perlApp,C:\perlApp>perl del_svn.pl  C:\theme\defaultTheme\assets 当然删除文件和目录,使用windows自带的dos脚本更简单一些

1.3K30
  • Perl 工作积累(不定期更新)

    =cut 多行注释 特殊变量: $$     Perl解释器的进程ID @ARGV  保存命令行参数 @_    在子程序内,这个数组变量包含传递给子程序的参数 $_           默认输入...一些特殊字符 3)数据库乱码问题:在脚本中查询的表和插入的表都要设置同样的编码如utf8($db_url->do(set names utf8)), 在secureCRT显示时设置UTF-8,查询数据库显示前...secureCRT sz/rz 也会遇到目录权限的问题 5)倒数据不要全量重新倒,可以设定时间起始点甚至表自增id,从文件读出写入;当tmmp表为空时,perl sql执行以下语句返回还是为真,需要再次判断...', -1)  // 得到22 14) perl中的散列赋值都是引用拷贝而非值拷贝 15) perl打印shell脚本的结果信息之前需要先chomp结果,否则打印出来的信息不对 16)  取出url的后缀...; #系统或库调用fail时会设置$! my $content = do { local $/; };

    1.4K00

    使用CLOC统计项目成员Git提交的代码量

    配合 Git,我们可以精确地统计某个作者(如“liuguangzhi”)在特定时间范围内所做的代码更改。本文将向你展示如何使用 Perl 和 cloc 来统计代码量。...一、下载和安装 Perlcloc 是一个 Perl 脚本,因此首先需要确保你的机器上已经安装了 Perl。如果尚未安装,可以通过以下步骤来下载并安装:1....在编辑框中点击“新建”,将 cloc.exe 所在的目录路径添加进去。点击“确定”保存设置。完成这些步骤后,你就可以在命令行中直接调用 cloc 命令了。...xargs cloc 将修改过的文件传递给 cloc,并统计这些文件的代码行数。...,并且统计结果会显示:blank: 空行comment: 注释行code: 实际的代码行数五、总结通过结合 Perl 和 cloc,你可以非常方便地统计某个作者在特定时间段内的代码量,帮助团队或个人更好地了解项目进度

    2111

    PHP脚本指南-解析GNU C风格命令行选项

    2020年新年第一文,冲鸭~来说一下PHP脚本开发时如何去解析对应的命令行选项 获取脚本名称 我们先来说一下如何获取当前执行的脚本是什么,我们可以使用$argv来获取,$argv包含当运行于命令行下时传递给当前脚本的参数的数组...获取命令行参数 在 PHP 中,当我们在获取命令行参数时,可以通过遍历$argv来获取,遍历这里就不说了,提供一个代码段,见GithubGist 我们来说一下PHP使用 getopt 这个函数来解析命令行选项...,但是PHP缺少了长短选项的映射关系配置,比如-v和--version,-h和--help等 $options短参数字符列表,该字符串中的每个字符会被当做选项字符,匹配传入脚本的选项以单个连字符-开头。...只允许 a-z、A-Z 和 0-9 $longopts长参数字符列表,此数组中的每个元素会被作为选项字符串,匹配了以两个连字符--传入到脚本的选项。...长参数由于是多字节,所以必须是数组,否则没法分隔 以上的两个参数字符后用单独的字符表示不接受传值;后面跟随一个冒号:的字符表示此选项需要值(必填);后面跟随两个冒号::的字符表示此选项的值可选 下面我们来看一下具体代码示例

    1.2K70

    一款短小精致的SSH后门分析

    后门简介 这个ssh 后门伪装成一个perl脚本,名为sshd,位于/usr/sbin/sshd , 将系统原先的sshd 移到/usr/bin下 sshd后门源码: #!...)的参数都传递给真正的sshd (这一行保证了普通用户也可以正常使用ssh 服务,登录并不会有什么异常现象) 补充: 在网络通信当中,大多传递的数据是以二进制流(binary data)存在的。...当传递字符串时,不必担心太多的问题,而当传递诸如int、char之类的基本数据的时候,就需要有一种机制将某些特定的结构体类型打包成二进制流的字符串然后再网络传输,而接收端也应该可以通过某种机制进行解包还原出原始的结构体数据...sshd 移至/usr/bin/sshd, mv /usr/sbin/sshd /usr/bin/sshd 将后门sshd (perl脚本移动至/usr/sbin/sshd),并授予执行权限 chmod...22 端口是sh 和 控制端连接,程序名是ssh ,而不是正常的sshd 为了增强隐秘性, 我们可以将copy 一份/bin/sh, 重命名为/bin/sshd,修改后门源码为: #!

    2.6K50

    《Perl进阶》——读书笔记(更新至14章)

    2.7 搜索路径 perl是通过@INC数组里的路径去搜索模块的,可以通过以下两种方式获取@INC的值: % perl -V % perl -le "print for @INC 程序中添加指定路径...也可以在程序运行的使用通过 -I 选项来扩展安装路径:% perl -I/home/homqyy/lib test.pl 2.9 local::lib 在没有管理员权限的时候,我们需要有个便携的安装路径以及自动找到路径的方法...do 非常适合创建一个操作的作用域: my $file_contents = do { local $/; local @ARGV = ( $filename ); };...因此 do 将忽视文件中的任何错误,程序将继续执行。...注意:类似Perl的动态语言无法自动将“尾递归”转为循环,因为再一次调用子例程之前,子例程定义可能改变。

    4.8K50

    【生信菜鸟经】如何系统入门Perl

    unless/while/next/last/for/foreach 读写文件,脚本实战! while(){ #do something !...} 这是我最喜欢的一个程序模板,读取文件,根据需要处理文件,然后输出。需要实现非常多的功能,然后就可以自己总结脚本技巧,也能完全掌握perl的各种语法。在生物信息学领域,需要实现的功能有!...学习单行命令的前提是掌握非常多的奇奇怪怪的perl自定义变量和perl的基础语法,用熟练了之后就非常方便,很多生物信息学数据处理过程我现在基本不写脚本,都是直接写一行命令,完全代替了shell脚本里面的...系统命令调用 文件句柄操作(STDIN,STDOUT,STDERR,ARGV,DATA,) 系统文件管理(mkdir/chdir/opendir/closedir/readdir/telldir/rmdir...大家可以仿造bioperl里面的各个功能,用自己的脚本来实现!

    1.8K90

    笨办法学 Python3 第五版(预览)(一)

    当你创建这个单元格时,请记住这些要点: 我没有在左侧输入行号。这些行号是在书中打印出来的,这样我就可以通过说“看第 5 行…”来谈论特定的行。你不需要在 Python 脚本中输入行号。...常见学生问题 我可以像这样定义一个变量吗: 1 = 'Zed Shaw'? 不可以,1不是一个有效的变量名。变量名需要以字符开头,所以a1是可以的,但1是不行的。 如何将浮点数四舍五入?...在这种情况下,这仅仅是为了让你练习将代码翻译成英文。 我可以使用单引号或双引号来创建一个字符串吗?它们有不同的作用吗?...尝试通过删除功能使脚本更加友好易用。 看看你能把脚本做得多短。我可以让这一行很长。 注意在“你应该看到的内容”末尾我使用了一个叫做cat的东西?...", 1) 在这种情况下,我有两个参数(也称为“参数”)传递给do_more_things函数:a和b。

    24310

    Perl语言入门系列之三:文件输入与输出

    在上一篇文章中我介绍了基本的输入与输出方法,通过键盘与屏幕实现用户与脚本的交互,但是为了完成更复杂的任务,输入与输出往往需要直接调用文件数据。...⑵参数数组 钻石操作符无法分开处理不同命令行参数指定的文件,perl编译器的命令行参数实际上是储存在事先建立的特殊数组@ARGV,这个数组的值就是由命令行参数组成的列表,可以像其他数组一样进行操作,我们可以通过调取这个数组的元素实现不同参数的选择处理...事实上命令行参数不仅可以指定文件,还可以有选项参数(一般是以“-”开头),用来控制程序的执行。...常见的格式输出如下所示: ①输出浮点数: -e表示在命令行直接运行Perl指令,将要运行的Perl代码放在后面单引号内;这里为了突出两部分参数将输出数据列表添加了括号,括号可以省略。...…"; #打印变量$rocks_fh的内容和字符串到标准输出 下面为文件句柄在Perl程序的使用示例: open FILE1, 'ARGV[0]" or die "Cannot open

    2.4K20

    生信分析人员如何系统入门python(2019更新版)

    这一点和 Perl 有着很大的差异,Perl 往往有多种实现目的的方式(而且即兴写出来的代码很容易在几个月后看不懂)。 Python 和 Perl 用哪个好?...我自己是写 Python 为主的,Perl 一直只有勉强读懂的水平,因此无法做深入的评价。单从生信常用的编程任务而言,两者实现的逻辑是非常相似的(或者说,编程本身的实现逻辑理念都是近似的)。...函数 ## 定义函数 def eg_function(a, b): c = a + b return c ## 调用函数 x = eg_function(3, 4) 传递给函数的参数形式...,基本方法有基于顺序的位置传参和关键词传参,另外还有更灵活的包裹传参,可以进一步了解。...通过引入模块,你就可以复用之前的 Python 程序,调用模块中的函数。模块实质上是比函数更高一层的封装模式。常见的功能编入模块就成为了所谓的库(library)。

    6.8K48

    分布式监控系统Zabbix-3.0.3-完整安装记录(5)-邮件报警部署

    .这个被设计用在php、bash 、perl和web站点使用。...这里注意一下: 安装zabbix 3.0之后,写的脚本一直发信不成功,手动执行时可以的。 那是因为zabbix3.0之后,可以自定义参数了。所以不写参数,它是不会传参数的。...在2.x版本不存在这个问题,默认会传3个参数。 点击“管理”->“用户"->"zabbix"  (我这里的zabbix的管理员账号是zabbix) ? ? ?...这就需要额外添加上面“动作”里的“条件”设置 如在“条件”里追加“主机”和“模板”,将所监控的主机和被监控主机采用的模板都选上为触发条件 这样,当任何一个条件被触发时,都会发送报警邮件! ? ? ?...测试: 将192.168.1.19服务器的zabbix_agent进程关闭。 ? 发现可以正常收到故障报警邮件(收到3次邮件PROBLEM故障邮件): ?

    97660

    使用远程接口库进一步扩展Robot Framework的测试能力

    目前RF 提供了Python,Ruby,.Net,Java,Perl和Clojure的Server。...然后一个远程服务器包裹的String库就好了。 分析一下代码,我们只是实例化了一个远程服务器,并且将String类作为参数传了进去。 其实我们在这里还能设置远程服务器IP和端口号。...Ø  在RF中调用远程库 首先我们要引用Remote Library,引用后就能直接使用了,跟使用本地库没有任何区别。 下面是测试远程String库的脚本。...,所有远程库的名称都叫做Remote,不同的只是后面的ip地址和端口号,我们也可用WITH NAME 关键字给它起一个别名,这是为了解决多个远程库里有相同关键字的问题(可以使用关键字前加命名空间的方式加以区分...不过值得说明的是,有些 server还不完善,比如Java远程库接口就不能正确的传递Exception,猜测是一些复杂对象不好通过XML-RPC协议进行序列化,感觉这个 可以再包一层皮

    99620

    Shell编程-函数

    总不能使用几十个选项和几十个脚本吧,这里引入一个函数的概念,可以把某些具体的功能,封装成功一个函数,有点类似一个单独的脚本,然后再引用。...在Shell脚本中,函数(Functions)允许您组织和重复使用代码片段,以及将复杂任务分解为更小的模块。函数可以带有参数,可以返回值,提供了一种封装和抽象代码的方式。...} 调用函数: 要调用函数,只需使用其名称即可: print_message 函数参数: 函数可以接受参数,参数通过位置变量 1, 2, 3, ... 表示。...,都是1,其中函数调用的时候,后面的1,就是运行该程序的时候传递给它的参数,如果不传参数,这个程序会运行失败。...比如我们在Shell编程-for循环打印的99乘法表,如果我们要打印一个其他乘法表,则需要修改代码,但是通过局部变量的我们把乘法表封装在函数内部,只要在运行函数的时候传递给他对应的参数,就可以打印任何乘法表

    7810

    进程控制第二弹(进程程序替换)

    调用exec并不创建新进程,所以调用exec前后该进程的id并未改变 我们知道,进程=内核数据结构+代码数据 程序替换的本质是将当前进程的代码和数据进行替换。 替换的时候,会不会创建新的进程?...让子进程执行一个全新的程序 首先父进程和子进程的PCB、虚拟内存构建好后,通过页表映射到物理内存中。...虽然代码是可读的,但是在操作系统看来都无所谓。所以重新开辟内存,将ls代码加载到物理内存,修改子进程的映射关系。至此,只要程序替换成功,彻底将子进程和父进程分开了。...[]); p(path) : 有p自动搜索环境变量PATH,用户可以不传要执行的路劲(但是文件名要传),直接告诉要执行谁即可 if(id==0) { sleep(2)...<<endl; return 0; } 运行结果: 结论:我们平时自己运行的程序,命令行参数和环境变量是父进程给你的,父进程自己有一个环境变量表,创建子进程时把对应的信息传递给子进程

    8710

    干货 | 深度剖析C语言的main函数

    当然参数的传递还可以有其他的方式,在下一节中,会单独来讲。 main 函数的返回值类型必须是 int ,这样返回值才能传递给程序的调用者(如操作系统),等同于 exit(0),来判断函数的执行结果。..._start函数的实现该入口是由ld链接器默认的链接脚本指定的,当然用户也可以通过参数进行设定。_start由汇编代码实现。...:数值型short,int,long等为0,bool为FALSE,指针为NULL,等等,即.bss段的内容 4.运行全局构造器,类似c++中全局构造函数 5.将main函数的参数,argc,argv等传递给...atexit函数 原形: int atexit(void (*func)(void)); atexit 函数可以“注册”一个函数,使这个函数将在main函数正常终止时被调用,当程序异常终止时,通过它注册的函数并不会被调用...多次注册同一个函数将导致这个函数被多次调用。函数调用的最后的操作就是出栈过程。

    2.2K40

    C语言的main函数解析

    当然参数的传递还可以有其他的方式,在下一节中,会单独来讲。 main 函数的返回值类型必须是 int ,这样返回值才能传递给程序的调用者(如操作系统),等同于 exit(0),来判断函数的执行结果。..._start函数的实现该入口是由ld链接器默认的链接脚本指定的,当然用户也可以通过参数进行设定。_start由汇编代码实现。...:数值型short,int,long等为0,bool为FALSE,指针为NULL,等等,即.bss段的内容 4.运行全局构造器,类似c++中全局构造函数 5.将main函数的参数,argc,argv等传递给...atexit函数 原形: int atexit(void (*func)(void));  atexit 函数可以“注册”一个函数,使这个函数将在main函数正常终止时被调用,当程序异常终止时,通过它注册的函数并不会被调用...多次注册同一个函数将导致这个函数被多次调用。函数调用的最后的操作就是出栈过程。

    2.6K88

    shell脚本编程之路3

    Shell 函数必须先定义后使用 Shell 函数与其他高级语言的函数有相似之处,也有返回值、删除函数、在终端调用函数(传参和递归)等等....来获取执行的结果; shell中函数传参与脚本传参是一致的,但是得注意 $0 代表任然是父脚本的名称; 删除函数 描述:像删除变量一样,删除函数也可以使用 unset 命令,不过要加上 .f 选项,如下所示...如果你希望直接从终端调用函数可以将函数定义在主目录下的 .profile 文件,这样每次登录后在命令提示符后面输入函数名字就可以立即调用。...WeiyiGeek.函数嵌套删除 0x09 shell脚本包含 描述:Shell文件包含像其他语言一样,Shell 也可以包含外部脚本,将外部脚本的内容合并到当前脚本,也能在函数中进行调用外部变量 脚本包含...描述:脚本调试功能是每一种编程语言具备得特性之一,出现一些始料未及得情况;使用调试功能可以弄清除是声明原因发生了错误或者异常; shell脚本自身已经包含调试选项,能打印出脚本接收得参数和输入; 方法

    3.3K10
    领券