问题标签 [perlvar]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
6397 浏览

perl - %INC 和@INC 之间有什么区别?

Perl%INC和 和有什么区别?@INC

0 投票
3 回答
718 浏览

perl - Perl 中的特殊变量 $@ 是什么意思?

我正在尝试理解以下代码:

0 投票
2 回答
250 浏览

perl - %INC 的键和值是否依赖于平台?

我想获取包含模块的完整文件名。考虑这段代码:


它可以在所有平台上运行吗?

perlvar

哈希%INC包含通过 、 或 运算符包含的每个文件名dorequire条目use。键是您指定的文件名(模块名称转换为路径名),值是找到的文件的位置。

这些键是否依赖于平台?我应该使用File::Spec还是什么?至少 Win32 上的 ActivePerl 使用/而不是\.

更新:%INC价值观呢?它们是否依赖于平台?

0 投票
5 回答
408 浏览

perl - $_ 与命名输入或循环参数有何不同?

当我经常使用 $_ 时,我想更好地了解它的用法。据我了解和使用,$_ 是隐式值的全局变量。

由于 $_ 似乎无论如何都设置了,除了可读性之外,还有理由在 $_ 上使用命名循环变量吗?

在什么情况下 $_ 是一个全局变量很重要?

所以如果我使用

甚至

它具有相同的效果

但它的工作原理是一样的吗?我想这不完全是,但实际的区别是什么?

更新

在这个例子中,似乎 $_ 的范围甚至是正确的。它不再是全球性的了吗?我正在使用 5.12.3。

正确打印 1234one1234two1234three1234four。

对于全球 $_ 我本来预计 1234 4 1234 4 1234 4 1234 4 .. 还是我错过了一些明显的东西?

那么 $_ 什么时候是全局的呢?

更新

好的,在更仔细地阅读了各种答案和 perlsyn 之后,我得出了一个结论:

除了可读性之外,最好避免使用 $_ 因为必须知道并考虑 $_ 的隐式本地化,否则可能会遇到意外行为。

感谢您澄清此事。

0 投票
2 回答
2025 浏览

perl - find/xargs/perl -ne 的当前文件名?

我在 shell 中工作,试图在一堆 CSV 文件中找到 NUL 字符(Python 的 CSV 导入器正在考虑,但那是另一次了)使用我如此自豪的我永远聪明的自我:

除了我看不到文件名。据称,包含我的脚本的隐式 <> 运算符perl -ne只是使用@ARGV/ARGV文件句柄,但以上都没有给我当前文件的名称。

我如何在上面看到当前文件名(理想情况下是行号)?

0 投票
3 回答
4693 浏览

perl - Perl 中默认变量 $_ 的作用域

我有以下方法,它接受一个变量,然后显示来自数据库的信息:

一切正常,除了 foreach 循环中的打印行。这个 $_ 变量仍然包含传递给方法的值。

无论如何要在 $_ 上“强制”新的值范围,还是它总是包含原始值?

如果有任何好的教程来解释 $_ 的范围是如何工作的,那也很酷!

谢谢

0 投票
1 回答
85 浏览

regex - 哪些 Perl 变量用于最后一次成功的正则表达式匹配的开始和结束位置?

哪些 Perl 变量用于最后一次成功的正则表达式匹配的开始和结束位置?

0 投票
6 回答
444 浏览

perl - 是否可以欺骗 Perl 使用变量 %INC 并且仍然保持全局 %INC 不变?

我刚刚找到了一个我们正在使用的脚本,其中有一个子说明my %INC,其中存储了一些关于激励的值,因此%INC. 这似乎从来都不是问题,或者没有人注意到。对我来说,它产生了 20 个重新定义警告屏幕,因为%INC.perl 包含所有文件名done、required 或used,非常大,而现在是('stuff' => 123).

我真的必须去重命名 sub 中对 this 的每一个引用,还是有另一种方法可以让 Perl 原谅这个......?


这是输出的一部分:

输出:

警告仅显示我是否创建了我的一个类的对象(它恰好包含SOAP::WSDL所以它有很多东西)。我不确定为什么这些是重新定义警告。如果%INC是空的,它怎么知道东西正在被重新定义?


更新:

看来您实际上可以创建一个词法my %INC.

产生(剪断):

在我的情况下的问题似乎不是my %INC,而是%INC = &sub_that_has_my_percent_INC_and_returns_it()我实际上必须在脚本中require。现在,反过来,也有use vars qw(%INC)。更换它......好吧,我不确定它会破坏什么。

0 投票
2 回答
295 浏览

perl - 16 位状态字 perlvar

当我遇到这个时,我正在阅读perlvar -

最后一个管道关闭、反引号 (`` ) 命令、成功调用 wait() 或 waitpid() 或来自 system() 运算符返回的状态。这只是传统的 Unix wait() 系统调用返回的 16 位状态字(或者被编造出来的样子)。因此,子进程的退出值实际上是 ($?>> 8 ),而 $? & 127 给出哪个信号

什么是 16 位状态字?'$?>> 8' 操作是什么意思?在我对它执行 '$?>> 8' 之后,如何将像 '512' 这样的 16 位字转换为 '2'?

0 投票
3 回答
415 浏览

perl - Package Variable in Perl not in "scope"?

I was looking at this question, and while I was playing around, I came across this:

Yes, I do have use warnings; turned off...

When I run this, I get:

Hmmm... I get the same "Variable "$foo" is not imported at ./test.pl line 12." error if I had done my $foo = "bar";. I would understand this when I use my because there is no variable $foo once we leave the block. But, our variables are suppose to be package scope. I could understand how $foo might not have a value at that point, but this?

Also, what does the "Variable "$foo" is not imported at ./test.pl line 12." mean? I understand packages and importing, but there's only a single package here, main. $foo should be in the main package. It doesn't need to be imported.

What is going on with my package variable that doesn't seem to be in the package after it falls out of scope?


Addendum

So if you used $::foo, or created another alias with our $foo; again, your program would work as expected. cmj

Let's try this...

Now, this prints out:

As everyone who answered pointed out, our merely makes an alias to the package variable of the same name, and it's lexically scoped. That means once the alias goes out of scope, so did my ability to access the value of $main::foo with $foo. That's something I never realized before.

However, as cjm pointed out, redeclaring our $foo; restores the alias, and the already existing $main::foo is aliased back to a new $foo. When I redeclare our $foo;, the value of $foo is restored.

It's one of the things about our variables that can be so confusing. You see a declaration our $foo;, and suddenly not only does that variable exist, but it has a mysterious value. You have to search the program to see where that value could have come from.