小编Joe*_*ger的帖子

外部"如果"的Perl匹配不会在循环上重置$ 1

我正在修补Zoidberg Perl shell以修复现代Perl版本在测试时抛出的一些错误.请注意,我不是原作者,也不是我批评他.我遇到了一个有趣的问题,我想要一点历史.

下面的代码采用一系列输入,每个条带关闭和结束sigil.然后它将该sigil存储在一个变量中,如果它没有找到它存储0.原始文件中的代码看起来像测试A,并且必须已经工作,直到并包括perl v5.8给出cpantesters结果.无论如何问题是如果s ///不在"if"测试中,循环时$ 1变量会持续使用最后一个值.这是我的测试.我想知道人们是否可以解释为什么会发生这种情况和/或为什么它曾经工作,我想我明白发生了什么.

#!/usr/bin/perl

use strict;
use warnings;

my @a = qw/n a$ b@ c/;
my @b = @a;
my @c = @a;

print "Test A -- Doesn't work (c !-> 0)\n";
for (@a) {
  s/([\$\@\%])$//;
  my $arg = $1 || 0;
  print $_ . " -> " . $arg . "\n";
}

print "\nTest B -- Works\n";
for (@b) {
  my $arg;
  if (s/([\$\@\%])$//) {;
    $arg = $1;
  }
  $arg ||= 0;
  print …
Run Code Online (Sandbox Code Playgroud)

regex perl

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

perl5140delta本地化绑定变量

perl5140delta说本地化的绑定变量没有长期束缚.此更改在5.13.1中实现,但在5.13.2中还原.这是回到5.14(从我的测试看起来似乎不是)或5.14.0的增量是不正确的?

我关心,因为我相信这会破坏File::chdir我经常使用的.

documentation perl tie

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

如何在不损坏系统安装的情况下安装新的Perl?

我见过很多人提到Perl> = 5.12中的一些很酷的新功能,但我首选的Linux Ubuntu风格只有5.10.1.

我不担心PPA,我知道如何谷歌(除非有人找到我的东西,然后我会感到羞怯).我找不到提供Perl PPA的人; 我以为所有东西都有PPA!

我更担心的是,由于基于Linux的操作系统perl作为其包装和其他系统的一部分使用,我不一定想自己冒险编译/安装它,以免破坏我的操作系统.

有人能给我一些关于最简单但最安全的升级/并行安装最新Perl版本的方法的指导吗?

  • 我能否以良好的方式指定多个二进制文件以不影响系统实用程序?
  • 如果安装了多个版本的Perl,模块如何工作?

linux perl install multiple-versions

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

Perl命令或模块,如Linux"file"命令

我有一个下载文件的脚本,但这些文件在下载之前没有任何关于它们的信息.在为Linux编写时,我刚刚调用qx{ 'file ' . $filename }它来查看它是否是JPEG图像,如果不删除它.但是,我现在正在尝试重写为独立于平台且纯Perl的形式.我已将所有调用转到system{ 'curl', $image_website }LWP :: UserAgent调用,我希望有一些方法可以用某些东西替换对文件的调用.

perl cross-platform file-get-contents

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

绑标量的构造函数

如果我有一个简单的绑定标量类,每次读取时都会递增,我可以这样做:

package Counter;

use strict;
use warnings;

sub TIESCALAR {
  my $class = shift;
  my $value = 0;

  bless \$value, $class;

  return \$value;
}

sub FETCH {
  my $self = shift;

  my $value = $$self;

  $$self++;

  return $value;
}

sub STORE {
  my $self = shift;
  $$self = shift;
}

1;
Run Code Online (Sandbox Code Playgroud)

但是要创建一个我必须使用的计数器变量tie.我可以创建一个计数器并导出它.但我真正想做的就是让它看起来像OO.看来我可以创建一个new这样的方法:

sub new {
  my $class = shift;
  my $counter;

  tie $counter, $class;

  return $counter;
}
Run Code Online (Sandbox Code Playgroud)

然后在我的主脚本中得到两个计数器:

my $counter1 = Counter->new();
my $counter2 = Counter->new(); …
Run Code Online (Sandbox Code Playgroud)

perl constructor tie

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

Perl Inline :: C失败时返回pdl或0

我正在构建一个模块,它连接到相机,拍照,并将数据读入一个小提琴.所有这些都发生在Inline :: C命令中.使用PDL文档中的过程,我可以创建pdl *并返回它.然而,相机可能无法拍照,在这种情况下,我希望0按照通常的协议返回my $pic_pdl = $Camera->TakePicture or die "Failed to take image".这似乎意味着我将需要使用该Inline_Stack_Push机制,但我不知道如何正确地将其pdl *转换为SV*.如果可能的话,我也想设置$!错误代码.可以在Inline中完成吗?

perl return-type pdl inline-c

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

Javascript的Mojolicious,布局和定位

我想在我的主要布局中加载大部分脚本(即jquery).根据我的理解,最好将脚本放在我的html页面的底部.

但是,如果我们将脚本放在布局页面的底部,就像这样.

layout/default.html.ep

<!doctype html>

<html>
<head><title><%= title %></title></head>
<body><%=content %></body>
</html>
<script src="js/jquery.min.js" type="text/javascript"></script>    
Run Code Online (Sandbox Code Playgroud)

然后在一个页面中使用此布局,该页面具有自己的javascript,依赖于jquery.

testscript.html.ep
%layout 'default';
%title 'Script Test';

<p>Main Page</p>

<script type="text/javascript">
$(document).ready(function(){
alert('fails if jquery is not loaded');  
});
</script>
Run Code Online (Sandbox Code Playgroud)

你最终得到这样的页面.请注意,对jquery的引用低于我依赖它的代码.

<!doctype html>

<html>
<head><title>Script Test</title></head>
<body>
<p>Main Page</p>

<script type="text/javascript">
$(document).ready(function(){
alert('fails if jquery is not loaded');
});
</script>
<script src="js/jquery.min.js" type="text/javascript"></script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

处理这种情况的最佳方法是什么?

把我的javascript引用放在我的布局顶部?我假设在使用此布局的每个页面中添加jquery的脚本引用不是最佳做法?

任何帮助深表感谢.我非常喜欢这一切.

干杯.

javascript perl jquery mojo mojolicious

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

在Perl中打印第二行数组

我有下面的代码,我试图只打印出这个2d数组的第一行

# how many columns
for (my $c = 0; $c <= $#list[0]; $c++) {
print $list[0][$c]."\n";
Run Code Online (Sandbox Code Playgroud)

数据应该是这样的

[0] => "ID,Cluster,Version"
[1] => "2,32,v44"
Run Code Online (Sandbox Code Playgroud)

错误:

syntax error at ./connect_qb.pl line 107, near "$#list["
syntax error at ./connect_qb.pl line 107, near "++) "
Execution of ./connect_qb.pl aborted due to compilation errors.
Run Code Online (Sandbox Code Playgroud)

arrays perl 2d multidimensional-array

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

Perl字符串连接的奇怪行为

我正在编写一个非常简单的脚本,读取maplist.txt文件并使用\n分隔的地图名称来构建命令字符串 - 但是,我遇到了一些意想不到的行为.

我的完整代码:

# compiles a map pack from maplist.txt
# for every server.
# Filipe Dobreira <dobreira@gmail.com>
# v1 @ Sept. 2011

use strict;
my @servers = <*>;
foreach my $server (@servers)
{
        # we only want folders:
        next if -f $server;
        print "server: $server\n";

        my $maplist = $server . '/orangebox/cstrike/maplist.txt';
        my $mapdir  = $server . '/orangebox/cstrike/maps';

        print "   maplist: $maplist\n";
        print "   map folder: $mapdir\n";

        # check if the maplist actually exists:
        if(!(-e $maplist))
        {
                print "!!! …
Run Code Online (Sandbox Code Playgroud)

perl string-concatenation

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