标签: perlvar

7
推荐指数
2
解决办法
6145
查看次数

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

我想获得一个包含模块的完整文件名.考虑以下代码:

package MyTest;

my $path = join '/', split /::/, __PACKAGE__;
$path .= ".pm";

print "$INC{$path}\n";

1;
Run Code Online (Sandbox Code Playgroud)
$ perl -Ipath/to/module -MMyTest -e0
path/to/module/MyTest.pm
Run Code Online (Sandbox Code Playgroud)

它适用于所有平台吗?

perlvar

散列%INC包含用于通过附带的每个文件名的条目do, require或者use运营商.键是您指定的文件名(模块名称转换为路径名),值是找到的文件的位置.

这些密钥是否依赖于平台?我应该使用File::Spec什么?至少在win32上使用ActivePerl /代替\.

更新:%INC价值观怎么样?它们是平台依赖的吗?

perl cross-platform perlvar

6
推荐指数
1
解决办法
243
查看次数

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

我使用的壳工作,试图找到一堆CSV文件NUL字符(Python的CSV进口商是哀一下,不过那是另一个时间),所以骄傲 - 的 - 我 - 不断巧妙自:

find ~/path/ -name "*.csv" -print0 | \
xargs -n 1 -0 \
perl -ne 'if(m/\x{00}/){print fileno(ARGV).join(" ",@ARGV).$_;}'
Run Code Online (Sandbox Code Playgroud)

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

如何查看上面的当前文件名(以及理想情况下的行号)?

perl xargs perlvar

4
推荐指数
1
解决办法
1945
查看次数

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

因为我使用$ _很多,我想更好地理解它的用法.就我所理解和使用它而言,$ _是隐含值的全局变量.

因为$ _似乎是设置的,除了可读性之外,有没有理由在$ _上使用命名循环变量?

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

所以,如果我使用

for (@array){
    print $_;
}
Run Code Online (Sandbox Code Playgroud)

甚至

print $_ for @array;
Run Code Online (Sandbox Code Playgroud)

它具有相同的效果

for my $var (@array){
    print $var;
}
Run Code Online (Sandbox Code Playgroud)

但它的工作方式是否相同?我想这不完全是,但实际的差异是什么?

更新:

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

#!/usr/bin/perl
use strict;
use warnings;

my @array = qw/one two three four/;
my @other_array = qw/1 2 3 4/;

for (@array){
    for (@other_array){
        print $_;
    }
    print $_;
}
Run Code Online (Sandbox Code Playgroud)

正确打印1234one1234two1234three1234four.

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

什么时候是$ _ global呢?

更新 …

perl perlvar

3
推荐指数
2
解决办法
400
查看次数

Perl中默认变量$ _的范围

我有以下方法接受变量,然后显示数据库中的信息:

sub showResult {
    if (@_ == 2) {
        my @results = dbGetResults($_[0]);
        if (@results) {
            foreach (@results) {
                print "$count - $_[1] (ID: $_[0])\n";
            }
        } else {
            print "\n\nNo results found";
        }
   }
}
Run Code Online (Sandbox Code Playgroud)

一切正常,除了foreach循环中的打印线.此$ _变量仍包含传递给方法的值.

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

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

谢谢

perl default perlvar perlsyn

2
推荐指数
1
解决办法
4575
查看次数

Perl中的包变量不在"范围"中?

我正在看这个问题,当我在玩耍时,我遇到了这个问题:

#! /usr/bin/env perl
#
# use warnings;
use strict;
use feature qw(say);

{
    our $foo = "bar";
    say "Foo = $foo";
}

say "Foo = $foo";  # This is line #12
Run Code Online (Sandbox Code Playgroud)

是的,我确实use warnings;关掉了......

当我运行这个时,我得到:

Variable "$foo" is not imported at ./test.pl line 12.
Global symbol "$foo" requires explicit package name at ./test.pl line 12.
Execution of ./test.pl aborted due to compilation errors.
Run Code Online (Sandbox Code Playgroud)

嗯...我得到相同的" 变量"$ foo"不会导入./test.pl第12行. "如果我已经完成错误my $foo = "bar";.我使用时会理解这一点,my因为$foo一旦离开块就没有变量.但是, …

perl perlvar

2
推荐指数
1
解决办法
176
查看次数

特殊变量$ @在Perl中意味着什么?

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

sub foo {
    ...
    if ( $@ ) {
        ...
        die $@;
    }
}
Run Code Online (Sandbox Code Playgroud)

perl eval perlvar

1
推荐指数
1
解决办法
638
查看次数

16位状态字perlvar

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

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

什么是16位状态字?操作'$?>> 8'表示什么?在我做'$?>> 8'之后,像'512'这样的16位字如何被转换为'2'?

perl 16-bit perlvar

0
推荐指数
1
解决办法
230
查看次数

标签 统计

perl ×8

perlvar ×8

16-bit ×1

arrays ×1

cross-platform ×1

default ×1

eval ×1

perlsyn ×1

xargs ×1