小编Bil*_*ert的帖子

为什么这个程序有效?我试图创建一个语法错误

我在Windows 7上运行ActiveState的32位ActivePerl 5.14.2.我想用Git预提交钩子来检测正在检查的语法错误的程序.(不知怎的,我只是设法做了这么糟糕的提交.)所以作为一个测试程序,我随机记下了这个:

use strict;
use warnings;

Syntax error!

exit 0;
Run Code Online (Sandbox Code Playgroud)

但是,它在没有警告的情况下编译和执行,退出时errorlevel为零.这个有效的语法怎么样?

perl

487
推荐指数
5
解决办法
2万
查看次数

Windows复制命令返回码?

我想测试批处理文件中副本的成功/失败,但是我找不到任何关于返回错误级别代码的文档.例如

copy x y
if %errorlevel%. equ 1. (
    echo Copy x y failed due to ...
    exit /B
) else (
  if %errorlevel% equ 2. (
      echo Copy x y failed due to ...
      exit /B
   )
... etc ...
)
Run Code Online (Sandbox Code Playgroud)

windows batch-file

27
推荐指数
3
解决办法
9万
查看次数

试图理解Perl对函数结果的排序

我试图对函数的结果进行排序,因为sort func();并且因为没有返回而被烧毁.我猜Perl认为函数调用是一个排序例程,后面没有数据.

Perldoc说第二个参数可以是子程序名称或代码块.我将func()视为调用,而不是名称.我认为这根本不是DWIMMY.

为了进一步探索这是如何工作的,我写道:

use strict;
use warnings;

sub func {
    return qw/ c b a /;
}

my @a;

@a = sort func();
print "1. sort func():    @a\n"; 

@a = sort &func;
print "2. sort &func:     @a\n"; 

@a = sort +func();
print "3. sort +func():   @a\n"; 

@a = sort (func());
print "4. sort (func()):  @a\n"; 

@a = sort func;
print "5. sort func:      @a\n"; 
Run Code Online (Sandbox Code Playgroud)

输出没有生成警告:

1. sort func():
2. sort &func:     a b c
3. sort +func(): …
Run Code Online (Sandbox Code Playgroud)

perl

16
推荐指数
2
解决办法
302
查看次数

"Scalars泄露:1"是什么意思?

我刚刚收到警告"Scalars泄露:1次"9次.

我猜它来自一个线程上传程序,它使用9个线程与模块线程,threads :: shared和Thread :: Queue.这是在WinXP,活动状态5.8.8.

知道这意味着什么吗?这个程序运行了一段时间没有这样的警告,我用相同的(轻)工作重新启动程序,导致警告,但这次没有警告.

我不是试图在编译时启动线程,除非这是Thread :: Queue在内部执行的操作.我的第一个线程调用是在Getopt :: Long处理之后.

perl

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

perlbrew在Windows上运行吗?

在Windows XP上使用ActiveState 5.8.8 ,我想安装一个更新的Perl用于测试/迁移.

windows perl perlbrew

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

是否存在类似于"0但是真实"的"未定义但真实"的值?

我正在编写一个搜索例程,其中undefined和zero都是有效的结果.我正在返回一个两元素数组,($result, $answer)因为我没有"未定义但真实"的值.它工作正常,但有点klutzy.一堂课似乎有点矫枉过正.

这样的事情是否存在或者可以以某种方式伪造?我正在考虑诸如0E0技巧之类的东西等.

更多细节.这是我想要的用户界面.当前例程返回两个值,结果(无论是否找到键)和值(如果是).

my $result = search_struct($key, $complex_data_structure);
if ($result) {
    print "A result was found for $key!  Value is: ", $result // "Undefined!", "\n";
}
else {
    print "Sorry, no result was found for $key.\n";
}
Run Code Online (Sandbox Code Playgroud)

perl

5
推荐指数
2
解决办法
467
查看次数

禁止在Moose类中使用非属性参数

如果在Moose的构造函数调用中有额外的参数而不是属性,有没有办法死?例如,这个:

package Shoe;
use Moose;
has 'size'  => (is => 'ro', isa => 'Num');
has 'color' => (is => 'ro', isa => 'Str', default => 'brown');
1;
Run Code Online (Sandbox Code Playgroud)

会死的

my $sneaker = Shoe->new(size => 11, colour => 'white');
Run Code Online (Sandbox Code Playgroud)

因为colour不属于Shoe.

我可以发誓我已经看过一个模块或其他什么来做这个但我找不到它.

parameters perl constructor moose

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

安全使用Perl的魔法钻石

B :: Lint不喜欢while (<>) {do stuff},docs显示令人讨厌的注入攻击,因为它内部使用了邪恶的2参数打开.有一种简单的方法可以使这种用法更安全吗?我有很多使用它的小脚本.

perl

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

引用带有undef条目的单词函数

在perl中使用引用词时,是否可以在列表中包含undef值?

my @ number_array = qw( 1 2 3 4 5 6 7 8 9 10 )
Run Code Online (Sandbox Code Playgroud)

我想知道是否可以在该列表中添加一个undef值,使其包含11个值而不是10个值?

perl

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

perl无法定​​位模块,即使它在那里

我正在尝试启动一个催化剂应用程序,但它一直在启动失败,因为它说它找不到我使用的模块HTML :: FormHandler :: Field :: TextArea.这是它给我的错误:

Can't locate HTML/FormHandler/Field/Textarea.pm in @INC (@INC contains:
/usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi
/usr/lib/perl5/site_perl/5.8.8
/usr/lib/perl5/site_perl /usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi
/usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl /usr/lib64/perl5/5.8.8/
x86_64-linux-thread-multi 
/usr/lib/perl5/5.8.8 .)
Run Code Online (Sandbox Code Playgroud)

但是,我查看了我的文件系统,我知道该模块位于的事实/usr/lib/perl5/site_perl/5.8.8/HTML/FormHandler/Field/TextArea.pm.正如您在上面所看到的,@INC确实包含了此文件的路径.有谁知道脚本为什么找不到它?谢谢!

perl require

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

Perl字符串匹配不应该失败

我的脚本中有以下代码.

if($description =~ /\'/) {
    print "I am here\n";    
    $description =~ s/\'/'/g;
}
print "description = $description\n";
Run Code Online (Sandbox Code Playgroud)

当我运行这个脚本时,"I am here\n"由于比较失败,我没有得到输出.

但是,当$description字符串确实包含撇号时.

$description = "The baseball player’s spiritual redemption and recovery from drug addiction.";

上下文:我正在解析从调用nytimes bestsellers api(以json格式返回)获得的字符串,并且此字符串存储在$description字符串中.

perl string-comparison

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

如何在Perl中仅声明数组的子集?

我要做这样的事情:

my ($sec,$min,$hour,$day,$mon,$year,$wday,$yday,$isdst) = localtime(time);
Run Code Online (Sandbox Code Playgroud)

但我不需要所有这些变量(只需要$ min,$ hour,$ mon,$ year).

是否有一个简单的解决方案只在perl中声明必填字段?

对我来说一个简单的解决方案就是这个,但它不是真正的"性感":

my @day = localtime(time);
my $min = $day[1];
my $hour = $day[2];
my $day = $day[3];
...
Run Code Online (Sandbox Code Playgroud)

提前感谢任何能够给我一些想法的人:)

arrays perl subset

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