如何启动Perl的交互式控制台,类似于Ruby的irb命令或python的python命令?

是否有一个正则表达式来匹配“所有字符包括换行符”?

例如,在下面的正则表达式中,$2没有输出,因为(.+?)在匹配时不包括新行。

$string = "START Curabitur mollis, dolor ut rutrum consequat, arcu nisl ultrices diam, adipiscing aliquam ipsum metus id velit. Aenean vestibulum gravida felis, quis bibendum nisl euismod ut. 

Nunc at orci sed quam pharetra congue. Nulla a justo vitae diam eleifend dictum. Maecenas egestas ipsum elementum dui sollicitudin tempus. Donec bibendum cursus nisi, vitae convallis ante ornare a. Curabitur libero lorem, semper sit amet cursus at, cursus id purus. Cras varius metus eu diam vulputate vel elementum mauris tempor. 

Morbi tristique interdum libero, eu pulvinar elit fringilla vel. Curabitur fringilla bibendum urna, ullamcorper placerat quam fermentum id. Nunc aliquam, nunc sit amet bibendum lacinia, magna massa auctor enim, nec dictum sapien eros in arcu. 

Pellentesque viverra ullamcorper lectus, a facilisis ipsum tempus et. Nulla mi enim, interdum at imperdiet eget, bibendum nec END";

$string =~ /(START)(.+?)(END)/;

print $2;

我试图在for循环中使用break语句,但由于我也在Perl代码中使用了严格的sub,所以我得到了一个错误提示:

暂不允许使用“break”字样 在./final.pl中使用的"strict subs 第154行。

有什么解决办法吗(除了禁用严格的sub)?

我的代码格式如下:

for my $entry (@array){
    if ($string eq "text"){
         break;
    }
}

Bash (Bash)、Z shell (zsh)、Fish (Fish)等shell语言和上面的脚本语言之间有什么区别,使它们更适合于shell?

在使用命令行时,shell语言似乎要容易得多。例如,对我来说,使用bash比在IPython中使用shell配置文件要流畅得多,尽管报告与此相反。我想大多数人都会同意我的观点,在Python中进行大部分中型到大型的编程比在Bash中更容易。我使用Python作为我最熟悉的语言。Perl和Ruby也是如此。

我试着阐明原因,但我不能,除了假设两者对字符串的不同处理与此有关。

提出这个问题的原因是我希望开发一种两者都可用的语言。如果你知道这样的语言,也请贴出来。

正如s .洛特所解释的,这个问题需要一些澄清。我问的是shell语言和脚本语言的特性。因此,比较不是关于各种交互(REPL)环境的特征,如历史记录和命令行替换。这个问题的另一种表达方式是:

适合于复杂系统设计的编程语言是否能够同时表达可以访问文件系统或控制作业的有用的一行程序?一种编程语言能有效地扩展和缩小吗?

我有时想匹配空白,而不是换行符。

到目前为止,我一直在使用[\t]。有不那么尴尬的方式吗?

我在Windows 7上运行ActiveState的32位ActivePerl 5.14.2。我想用Git预提交钩子来检测有语法错误的检入程序。(不知怎么的,我就做了这么糟糕的承诺。)所以作为一个测试程序,我随机写下了这个:

use strict;
use warnings;

Syntax error!

exit 0;

但是,它编译和执行时没有警告,退出时errorlevel为零。这是如何有效的语法?

我想知道为什么大多数使用Perl构建的现代解决方案在默认情况下不启用UTF-8。

我知道核心Perl脚本有许多遗留问题,可能会破坏一些东西。但是,从我的角度来看,在21世纪,大型的新项目(或具有大视角的项目)应该从头开始使他们的软件支持UTF-8。但我还是不认为会发生这种情况。例如,Moose启用严格和警告,但不启用Unicode。现代的::Perl也减少了样板文件,但没有UTF-8处理。

为什么?在2011年的现代Perl项目中,是否有一些避免使用UTF-8的理由?


评论@tchrist太长了,所以我把它加在这里。

看来我没有说清楚。让我试着补充一些东西。

我和他对情况的看法很相似,但我们的结论却完全相反。我同意,Unicode的情况是复杂的,但这就是为什么我们(Perl用户和编码员)需要一些层(或pragma),使UTF-8的处理像现在一样简单。

它指出了许多方面,我将阅读和思考他们几天甚至几个星期。不过,这不是我的重点。tchrist试图证明“启用UTF-8”不是一种单一的方法。我没有那么多的知识与之争论。所以,我坚持用活生生的例子。

我玩了Rakudo和UTF-8只是我需要的。我没有遇到任何问题,一切都很顺利。也许有一些更深层次的限制,但在开始时,我所测试的所有工作都符合我的预期。

这难道不应该是现代Perl 5的目标吗?我要强调的是:我并不是建议将UTF-8作为核心Perl的默认字符集,而是建议开发新项目的人员可以使用snap触发它。

Another example, but with a more negative tone. Frameworks should make development easier. Some years ago, I tried web frameworks, but just threw them away because "enabling UTF-8" was so obscure. I did not find how and where to hook Unicode support. It was so time-consuming that I found it easier to go the old way. Now I saw here there was a bounty to deal with the same problem with Mason 2: How to make Mason2 UTF-8 clean?. So, it is pretty new framework, but using it with UTF-8 needs deep knowledge of its internals. It is like a big red sign: STOP, don't use me!

我真的很喜欢Perl。但是处理Unicode是痛苦的。我仍然发现自己在撞墙。在某种程度上tchrist是正确的,并回答了我的问题:新项目不吸引UTF-8,因为它在Perl 5中太复杂了。

当我运行perl时,我得到警告:

perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
    LANGUAGE = (unset),
    LC_ALL = (unset),
    LANG = "en_US.UTF-8"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").

我该怎么解决呢?