我有两个perl脚本需要一起运行。
第一个脚本定义了许多常用函数和主方法。
脚本1(one.pl)示例:
#!/usr/bin/perl
sub getInformation
{
my $serverMode = $_[0];
my $port = $_[1];
return "You\nneed\nto\nparse\nme\nright\nnow\n!\n";
}
#main
&parseInformation(&getInformation($ARGV[0], $ARGV[1]));
第二个是在定义两个函数后调用第二个脚本的脚本。
脚本2(two.pl)示例:
#!/usr/bin/perl
sub parseInformation
{
my $parsedInformation = $_[0];
#omitted
print "$parsedInformation";
}
my $parameterOne = $ARGV[0];
my $parameterTwo = $ARGV[1];
do "./one.pl $parameterOne $parameterTwo";
命令行用法:
> ./two.pl bayside 20
我试图这样做并且脚本似乎运行但是,每当我在perl -d two.pl
模式下运行脚本时,我都没有从调试器获得有关其他脚本的信息。
我做了一些研究并阅读了system
,capture
,require
和do
。如果使用系统函数来运行脚本,我将如何导出脚本2中定义的函数?
问题:
1.无论如何在perl中这样做吗?
2.如果是这样,我究竟需要如何实现这一目标?
我完全理解perl是perl。不是另一种编程语言。不幸的是,过渡时往往会带来他们所知道的东西。道歉。
参考文献:
How to run a per script from within a perl script
Perl documentation for require function
答案 0 :(得分:1)
一般来说,这不是你应该在Perl中编写可重用的常用函数的方式。相反,您应该将大部分代码放入Perl模块中,并编写充当模块包装器的简短脚本。这些简短的脚本基本上应该只是获取并验证命令行参数,将这些参数传递给模块以进行实际工作,然后格式化并输出结果。
我真的希望我能推荐perldoc perlmod来学习编写模块,但它似乎主要集中在细节上而不是如何编写和使用Perl模块的高级概述。 Gabor Szabo's tutorial也许是一个更好的起点。
这是一个简单的例子,创建一个输出Unix时间戳的脚本。这是模块:
# This file is called "lib/MyLib/DateTime.pm"
use strict;
use warnings;
package MyLib::DateTime;
use parent "Exporter";
our @EXPORT_OK = qw( get_timestamp );
sub get_timestamp {
my $ts = time;
return $ts;
}
1;
这是使用它的脚本:
#!/usr/bin/env perl
use strict;
use warnings;
use lib "/path/to/lib"; # path to the module we want, but
# excluding the "MyLib/DateTime.pm" part
use MyLib::DateTime qw( get_timestamp ); # import the function we want
# Here we might deal with input; e.g. @ARGV
# but as get_timestamp doesn't need any input, we don't
# have anything to do.
# Here we'll call the function we defined in the module.
my $result = get_timestamp();
# And here we'll do the output
print $result, "\n";
现在,运行脚本应该输出当前的Unix时间戳。另一个使用时间戳执行更复杂的脚本也可以使用MyLib :: DateTime。
更重要的是,需要对时间戳执行某些操作的另一个模块可以使用MyLib :: DateTime。将逻辑放入模块中,让这些模块相互使用,实际上是CPAN的本质。我一直在展示一个非常基本的日期和时间库,但日期时间操作之王是CPAN上的DateTime模块。这反过来使用DateTime::TimeZone。
重用代码的简易性,以及CPAN上大量免费,经过良好测试和(大多数)文档齐全的模块的可用性,是Perl的主要卖点之一。
答案 1 :(得分:1)
完全。
同时运行2个单独的脚本将不会让任何脚本访问其他功能。它们是两个完全独立的过程。你需要使用模块。模块的要点是你不要重复自己,通常称为“干”编程。一个简单的经验法则是: