perl 中 $/ 代表了啥意思?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了perl 中 $/ 代表了啥意思?相关的知识,希望对你有一定的参考价值。

local $/ = ">"

起到什么改变?

$/      为输入记录分隔符,默认为换行符。该变量会影响 Perl对“行”这一概念的理解。其功能类似于 awk 中的 RS变量,在被设置为空字符串时同样会将空白行作为终止标志。(空白行不能含有任何空格或制表符。)

你可以将其设置为含有多个字符的字符串,以匹配多字符的终止标志;也可以设为"undef" 以便一直读到文件结束。


当文件含有连续的空白行时,把它设为"\\n\\n" 和设为 "" 有少许不同:

    设为 ""  会把两个或更多连续的空白行视为单个 空白行;

    而设为 "\\n\\n"  则只是盲目地假定其后输入的字符属于下一段,即使这些字符是换行符也一样。(助记:在引用诗句时会用 /作为行间的分隔。)

local $/; # enable "slurp" mode
local $_ = ; # whole file now here
s/\\n[ \\t]+/ /g;

切记:$/ 的内容是一个字符串,而不是正则表达式。

    将 $/设为整数、存有整数的标量或可转换成整数的标量这些值的引用时,Perl会尝试读入记录而不是行,最大记录长度就是引用的那个整数。

因此这段 代码:

local $/ = \\32768; # or \\"32768", or \\$var_containing_32768
open my $fh, $myfile or die $!;
local $_ = ;

会从 FILE 读取一条不长于 32768字节的记录。如果你不是在读取一个面向记录的文件(或者所用的 OS没有面向记录的文件类型),那很可能每次读取都得到一整块的数据。若某条记录比你所设置的记录长度还大,就会把该记录拆成若干片 返回。

参见 "Newlines" in perlport 以及 $.。

参考技术A 它会改变你读取文件时候,对行的分隔符,一般行都是根据回车分隔,
local $/ = ">" 会根据 > 来分隔行。
参考技术B 自带的全局变量,默认值为“\n". perl中”行“的概念就由$/决定。

$data = "this>";
local $/ = ">";
chomp($data);

$data的值就是”this".本回答被提问者和网友采纳

“cpan 报告”命令究竟做了啥?

【中文标题】“cpan 报告”命令究竟做了啥?【英文标题】:What does the command "cpan reports" do exactly?“cpan 报告”命令究竟做了什么? 【发布时间】:2020-11-15 18:17:18 【问题描述】:

我尝试使用命令cpan install Moose 在 perl 5.32.0 中安装 Moose。安装失败,显示以下消息:

Result: FAIL
Failed 448/478 test programs. 12/30 subtests failed.
Makefile:2047: recipe for target 'test_dynamic' failed
make: *** [test_dynamic] Error 255
  ETHER/Moose-2.2013.tar.gz
13 dependencies missing (Class::Load,Class::Load::XS,Data::OptList,Devel::OverloadInfo,Dist::CheckConflicts,Module::Runtime::Conflicts,Package::DeprecationManager,Package::Stash,Package::Stash::XS,Params::Util,Sub::Exporter,Sub::Identify,Test::CleanNamespaces); additionally test harness failed
  /usr/bin/make test -- NOT OK
//hint// to see the cpan-testers results for installing this module, try:
  reports ETHER/Moose-2.2013.tar.gz

我尝试了命令cpan reports ETHER/Moose-2.2013.tar.gz,不知何故这正确安装了Moose。这里发生了什么? cpan reports 到底做了什么?这和 App::cpanreports 一样吗?

【问题讨论】:

【参考方案1】:

那里的错误消息是指您可以在 CPAN.pm shell 中执行的操作,而 cpan 命令没有任何可映射的内容。即使是这样,它看起来也不一样。

cpan 不带参数将您带入 CPAN.pm 外壳,您可以在那里发出命令(例如 install 等等)。对于reports,需要先安装LWP和CPAN::Reporter:

% cpan LWP CPAN::Reporter
...
% cpan
cpan[1]> reports ETHER/Moose-2.2013.tar.gz
Distribution: E/ET/ETHER/Moose-2.2013.tar.gz
Fetching 'http://www.cpantesters.org/show/Moose.json'...DONE

2.2013:
 +PASS 5.28.0 on SunOS/Solaris 2.11 (i86pc-solaris-64)
 +PASS 5.28.3 on GNU/Linux 5.4.34-0-lts (x86_64-linux-thread-multi)
 +PASS 5.22.4 on GNU/Linux 5.4.0-26-generic (x86_64-linux)
 +PASS 5.26.0 on FreeBSD 12.1-release (i386-freebsd-64int)
 +PASS 5.26.0 on SunOS/Solaris 2.11 (i86pc-solaris-64)

但是,查看CPAN Testers 可能更容易查看特定模块的结果。

【讨论】:

【参考方案2】:

[你问为什么使用 cpan reports ... 而不是 cpan install ... 有帮助。这回答了这个问题。 brian d foy 解释了为什么 cpan reports ... 不是您想要执行的。]

它尝试安装一个名为 reports 的模块。


cpan 的语法是

cpan [options] <module_name> [<module_name> ...]

操作是通过选项指定的。默认运算符为-i(安装)。


cpan install Moose

此命令尝试安装两个发行版:

包含install模块的最新版本。

已创建同名的dummy module,因此不会产生任何错误。

cpan 的较新版本会忽略此错误请求。

包含Moose模块的最新版本。

目前是ETHER/Moose-2.2013.tar.gz


cpan reports ETHER/Moose-2.2013.tar.gz

此命令尝试安装两个发行版:

包含reports模块的最新版本。

没有名为 reports 的模块,因此该部分失败。

>(error): Could not expand [reports]. Check the module name.
>(info): I can suggest names if you install one of Text::Levenshtein::XS, Text::Levenshtein::Damerau::XS, Text::Levenshtein, and Text::Levenshtein::Damerau::PP
>(info): and you provide the -x option on invocation.
>(error): Skipping reports because I couldn't find a matching namespace.

ETHER/Moose-2.2013.tar.gz


所以,

cpan install Moose

只是一种糟糕的写作方式

cpan Moose

还有,

cpan reports ETHER/Moose-2.2013.tar.gz

只是一种糟糕的写作方式

cpan ETHER/Moose-2.2013.tar.gz

目前,这应该相当于

cpan Moose

换句话说,您声称无效的命令与您声称有效的命令之间没有区别。

【讨论】:

有趣。我尝试在新的 local::lib 中运行 cpan Moose。我遇到了同样的问题。我再次运行相同的命令。现在 Moose 已正确安装。所以出于某种原因,我必须安装 Moose 两次。这是一个完全不同的问题。

以上是关于perl 中 $/ 代表了啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

Perl中&代表啥含义?帮我看下下面代码(windows下),谢谢!

安卓软件用ZIP方式打开时会出现几个文件夹,那些都代表了啥意思有啥用啊!

CSS/HTML代码attribute 对象 是啥意思,代表啥

协议和代表不起作用..我做错了啥?

$SIG'ALRM' 在 Perl 中做了啥

CA1-400/F/Q双电源中的FQ分别代表啥意思