perl中subroutine和system()的区别

Dromflicka 2010-02-01 04:46:06
最近做一个项目,刚开始学习perl
因为是两个人一起做,分别写部分PERL程序,最后拼成一个完整的程序
因为看到有SYSTEM命令可以调用不同的脚本
想知道调用SUBROUTINE和用SYSTEM()执行脚本,在内核里有啥区别
...全文
502 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dromflicka 2010-02-05
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 mhoudg 的回复:]
所谓 sub,系统执行你的程序:
读取你的第一个脚本A.pl,发现A.pl调用了B.pm,然后就去@INC里寻找有没有 B.pm 这个东西,找到了,就执行,然后把结果传给 A.pl 的后续程序
如果是 system,系统执行你的程序:
读取你的第一个脚本A.pl,发现A.pl调用了 system B,然后就去 $PATH 里寻找你的脚本(如果是 perl 脚本,还得启动 perl),然后努力截获的 B 脚本结果,交给 A.pl 的后续程序

这等于说,本来触手可及的一点小事情,你非得绕很大圈子找另一个人做,很不合理啊
[/Quote]
原来是这样!因为不是我一个人写同一个东西!和我一起写的同学不太会软件的东西!他给我的都是PL的文件!我在考虑是否需要把他给我的PL换成PM!

谢谢你给的解释!
mhoudg 2010-02-05
  • 打赏
  • 举报
回复
所谓 sub,系统执行你的程序:
读取你的第一个脚本A.pl,发现A.pl调用了B.pm,然后就去@INC里寻找有没有 B.pm 这个东西,找到了,就执行,然后把结果传给 A.pl 的后续程序
如果是 system,系统执行你的程序:
读取你的第一个脚本A.pl,发现A.pl调用了 system B,然后就去 $PATH 里寻找你的脚本(如果是 perl 脚本,还得启动 perl),然后努力截获的 B 脚本结果,交给 A.pl 的后续程序

这等于说,本来触手可及的一点小事情,你非得绕很大圈子找另一个人做,很不合理啊
Dromflicka 2010-02-04
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 mhoudg 的回复:]
subroutine 和 system 完全不相同啊
exec 和 system 的异同还有点讨论的价值……

subroutine 是调用一个函数,再单纯不过了
system 就是调用操作系统的程序了,不过貌似也不会启动新的进程
[/Quote]
实现一个功能,写成函数(用模块写在不同的文件内)和写成脚本用SYSTEM有啥区别啊?
mhoudg 2010-02-04
  • 打赏
  • 举报
回复
subroutine 和 system 完全不相同啊
exec 和 system 的异同还有点讨论的价值……

subroutine 是调用一个函数,再单纯不过了
system 就是调用操作系统的程序了,不过貌似也不会启动新的进程
Aylazhang 2010-02-04
  • 打赏
  • 举报
回复
看不懂问题。
Dromflicka 2010-02-04
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xteeqq 的回复:]
subroutine和system是两个概念。

subrouteine是perl支持的定义并调用函数的方法。就像在C语言中定义了一个函数,再由main函数调用这个函数。定义函数的方法如下:
sub 函数名
{
    函数体
}

使用函数的方法如下:
函数名(参数列表), 函数体的实现决定了参数列表中参数的意义及如何处理这些参数。

system是perl中调用系统中存在的其他任何程序的方法。其使用方法如下:
system(参数列表),参数列表中第一个元素为要调用的程序名,其余为其参数。system启动指定的程序运行程序并等待其结束,程序结束时带回其返回值。


注:在任一本讲perl的教材中都有更详细的阐述,楼主可以看一下小骆驼书。
[/Quote]
我能理解SYSTEM调用PERL程序可以等效于写PERL的确涵数吗?概念并没有解释使用上的不同啊!
xteeqq 2010-02-04
  • 打赏
  • 举报
回复
subroutine和system是两个概念。

subrouteine是perl支持的定义并调用函数的方法。就像在C语言中定义了一个函数,再由main函数调用这个函数。定义函数的方法如下:
sub 函数名
{
函数体
}

使用函数的方法如下:
函数名(参数列表), 函数体的实现决定了参数列表中参数的意义及如何处理这些参数。

system是perl中调用系统中存在的其他任何程序的方法。其使用方法如下:
system(参数列表),参数列表中第一个元素为要调用的程序名,其余为其参数。system启动指定的程序运行程序并等待其结束,程序结束时带回其返回值。


注:在任一本讲perl的教材中都有更详细的阐述,楼主可以看一下小骆驼书。
Dromflicka 2010-02-03
  • 打赏
  • 举报
回复
为啥没人答我的问题啊?难道用PERL的人很少呀?
yangds123 2010-02-03
  • 打赏
  • 举报
回复
关注一下~
z8861842 2010-02-01
  • 打赏
  • 举报
回复
我要得分
z8861842 2010-02-01
  • 打赏
  • 举报
回复
aaaa

37,744

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧