【问题标题】:Make Perl script work in both Perl 5 and 6使 Perl 脚本在 Perl 5 和 6 中都能工作
【发布时间】:2013-08-14 14:48:39
【问题描述】:

我有一个需要在 Perl 5 和 Perl 6 环境中运行的 Perl 脚本。如果使用 Perl6,我需要使用“perl6::Form”,而在 Perl5 上,我需要使用“Format”。

此代码在两个版本或 perl 上都可以正常工作:

BEGIN {
    if( $] ge 6){
        require Perl6::Form;
        Perl6::Form::->import();
    }
}

但我不知道在 Perl5 上运行时如何“分离”Perl6 代码。

if( $] ge 6){ # Perl6
    print form
    ...
    ...
} else { # perl5
    format STDOUT =
    ...
    ...
} 

当我在 Perl5 上遇到错误时,这不能正常工作:

Unquoted string "form" may clash with future reserved word at /usr/bin/script.pl line 628.
Name "main::form" used only once: possible typo at /usr/bin/script.pl line 641.

我已经简要地查看了Text::CPP,但我不想依赖正在安装的编译器。任何建议,将不胜感激。

【问题讨论】:

  • 我感到有些困惑...... [Perl6::Form](search.cpan.org/perldoc Perl6::Form) 是一个 Perl5 模块......到目前为止我基本上忽略了 Perl6......所以我可能遗漏了一些东西......你从哪里得到可以将 Perl5 和 Perl6 代码组合在同一个源中的想法?我很好奇。
  • AFAIK、Perl5 和 Perl6 是完全不同的语言。你能告诉我你是从哪里想到可以将它们结合在同一个源文件中的吗?
  • 嗯,我来自 C 背景,我们使用预处理器命令使我们的代码在许多平台上可移植。我希望我可以用 perl 做到这一点。听起来那是不可能的。
  • 好的,C 背景示例:您上次在同一个源文件中混合 C 和 Java 是什么时候?
  • 再一次,没有 perl6::Form 这样的东西

标签: forms perl portability raku


【解决方案1】:

如果使用 Perl6 我需要使用“perl6::Form”

perl6::Form 不存在。

Perl6::Form 是一个 Perl5 模块,提供类似于 Perl6 的 form 的功能。

Perl6 模块对 Perl6::Form 没有用处,即使它可以运行它,因为它是语言的一部分。

但我不知道在 Perl5 上运行时如何“分离”Perl6 代码。

Perl6 不是 Perl5 的版本。 Perl5 和 Perl6 是完全不同的语言。 (Perl5 的最新版本目前是 18.1)我不明白你怎么能认为你可以让两者都执行一个程序。

区分 Perl5 程序和 Perl6 程序的最佳方法是将它们放在不同的文件中。如果您需要将它们放在同一个文件中,则需要说明需要我们帮助您找到合适的解决方案。

【讨论】:

  • 我不会说它们是完全不同的语言,但它们肯定是不同的,以至于将它们混合在一个源文件中不太可能值得付出努力。我似乎记得 Perl6 最初的设计目标是能够执行 Perl5 代码 [需要引用],但我认为这还没有完成,我也不会指望它真的会发生。
  • @Keith Thompson,Java 的语法与 C 的相似,就像 Perl6 的与 Perl5 的相似。我称之为完全不同的语言。
  • @Keith Thompson,这个想法是创建一个可以运行 Perl5 和 Perl6(即 Parrot)的 解释器。 Perl6 不会运行 Perl5,因为 Perl6 不是程序。
  • 我将 C 和克林贡语称为完全不同的语言,但我认为我们已经同意它们的不同之处足以编写有效 Perl5 和有效 Perl6 的代码特技而不是任何有用的东西。
  • @teodozjan,你错误地像 C 和 C++ 一样。 C 主要是 C++ 的子集,但 Perl5 不是 Perl6 的子集。你不能假装 Perl5 代码是 Perl6 代码,就像你可以假装 C 代码是 C++ 代码一样,这就是重点。您不能让一段代码成为有效的 Perl5 和 Perl6 代码。请重新阅读 OP,并避免进一步出于情感动机、偏离主题的回复。
猜你喜欢
  • 2015-04-25
  • 2016-05-17
  • 1970-01-01
  • 1970-01-01
  • 2018-11-07
  • 2023-03-21
  • 2016-11-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多