在 perl 中,对于在命令行上调用的脚本与脚本需要的文件,可接受的术语是什么?
in perl, what are the accepted terms for the script one invokes on the command line vs. the files that script requires?
我编写的 perl 脚本需要其他 perl 脚本。 “需要”的脚本包含子例程定义。 (我还没有达到编写自己的包或模块的水平;我只需要文件。)是否有一套公认的术语来区分“祖先”脚本,即我在命令中调用的脚本行,以及在我调用“祖先”脚本时需要和解析的“后代”脚本?例如,在下面的代码片段中
use Cwd 'abs_path';
my $script=abs_path([=10=]);
这是否出现在我调用的脚本中或出现在我的 files/scripts 之一所需的文件中并不重要;答案是一样的。
是否有除“script”之外的变量名称对编程社区的人们更有意义?也许是更具体的术语?
下一页
https://perldoc.perl.org/variables/[=11=]
似乎暗示“程序”是比“脚本”更好的术语?
但这也是一个非常笼统的术语;它可能意味着任何事情。
在我看来,我的整个所需文件集构成了程序。
我当然一直在对它们进行编程。
如果其中之一抛出异常或错误,整个事情就会结束。
这些术语并不是 Perl 特有的,尽管某些语言可能有更专业、更具体的定义。
程序和脚本基本上是一回事。几乎没有人会对使用这些术语中的任何一个感到困惑。有些人认为术语“脚本”意味着它在某种程度上比实际情况要少,但这没什么大不了的。不过,通常情况下,要么“做”某事。
您需要的东西通常称为“库”或“模块”,这些往往是其他 Perl 文件,它们提供一些东西供您使用,而不是直接做一些事情。通常这些除了提供您可以在主程序中使用的东西外不会“做”任何事情。
一个程序可能需要另一个程序并让它完成它的工作,但这不是一种常见的做法。
你询问 use Cwd 'abs_path';
以及它应该出现在哪里。尽管无论你把它放在哪里它都可以工作,但我倾向于将它包含在任何会使用 abs_path
的文件中。您包含的库可能会决定删除它或朝不同的方向发展。不要依赖库来直接使用你要使用的部分。你可能会暂时摆脱它,但它更脆弱。
在 Perl 4 时代,在我们有命名空间之前,我们称这些文件为“库”。
这些天,他们没有众所周知的名字,因为没有理由为这种糟糕的做法找借口。
让我们修复您的代码。
在脚本中:
- 添加
use FindBin qw( $RealBin ); use lib $RealBin;
。这告诉 Perl 寻找与脚本相同的模块。
对于模块的用户:
- 使用
use SomeName;
而不是 do("SomeName.pl") or die $@ // $!;"
来加载所需的文件。
对于模块:
- 重命名为
SomeName.pm
。
- 添加
package SomeName;
.
- 添加
use Exporter qw( import ); @EXPORT = qw( sub1 sub2 ... );
.
- 您应该已经有了尾随
1
。如果没有,请添加。
我编写的 perl 脚本需要其他 perl 脚本。 “需要”的脚本包含子例程定义。 (我还没有达到编写自己的包或模块的水平;我只需要文件。)是否有一套公认的术语来区分“祖先”脚本,即我在命令中调用的脚本行,以及在我调用“祖先”脚本时需要和解析的“后代”脚本?例如,在下面的代码片段中
use Cwd 'abs_path';
my $script=abs_path([=10=]);
这是否出现在我调用的脚本中或出现在我的 files/scripts 之一所需的文件中并不重要;答案是一样的。
是否有除“script”之外的变量名称对编程社区的人们更有意义?也许是更具体的术语?
下一页 https://perldoc.perl.org/variables/[=11=] 似乎暗示“程序”是比“脚本”更好的术语? 但这也是一个非常笼统的术语;它可能意味着任何事情。 在我看来,我的整个所需文件集构成了程序。 我当然一直在对它们进行编程。 如果其中之一抛出异常或错误,整个事情就会结束。
这些术语并不是 Perl 特有的,尽管某些语言可能有更专业、更具体的定义。
程序和脚本基本上是一回事。几乎没有人会对使用这些术语中的任何一个感到困惑。有些人认为术语“脚本”意味着它在某种程度上比实际情况要少,但这没什么大不了的。不过,通常情况下,要么“做”某事。
您需要的东西通常称为“库”或“模块”,这些往往是其他 Perl 文件,它们提供一些东西供您使用,而不是直接做一些事情。通常这些除了提供您可以在主程序中使用的东西外不会“做”任何事情。
一个程序可能需要另一个程序并让它完成它的工作,但这不是一种常见的做法。
你询问 use Cwd 'abs_path';
以及它应该出现在哪里。尽管无论你把它放在哪里它都可以工作,但我倾向于将它包含在任何会使用 abs_path
的文件中。您包含的库可能会决定删除它或朝不同的方向发展。不要依赖库来直接使用你要使用的部分。你可能会暂时摆脱它,但它更脆弱。
在 Perl 4 时代,在我们有命名空间之前,我们称这些文件为“库”。
这些天,他们没有众所周知的名字,因为没有理由为这种糟糕的做法找借口。
让我们修复您的代码。
在脚本中:
- 添加
use FindBin qw( $RealBin ); use lib $RealBin;
。这告诉 Perl 寻找与脚本相同的模块。
对于模块的用户:
- 使用
use SomeName;
而不是do("SomeName.pl") or die $@ // $!;"
来加载所需的文件。
对于模块:
- 重命名为
SomeName.pm
。 - 添加
package SomeName;
. - 添加
use Exporter qw( import ); @EXPORT = qw( sub1 sub2 ... );
. - 您应该已经有了尾随
1
。如果没有,请添加。