我正在修补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) perl5140delta说本地化的绑定变量没有长期束缚.此更改在5.13.1中实现,但在5.13.2中还原.这是回到5.14(从我的测试看起来似乎不是)或5.14.0的增量是不正确的?
我关心,因为我相信这会破坏File::chdir
我经常使用的.
我见过很多人提到Perl> = 5.12中的一些很酷的新功能,但我首选的Linux Ubuntu风格只有5.10.1.
我不担心PPA,我知道如何谷歌(除非有人找到我的东西,然后我会感到羞怯).我找不到提供Perl PPA的人; 我以为所有东西都有PPA!
我更担心的是,由于基于Linux的操作系统perl
作为其包装和其他系统的一部分使用,我不一定想自己冒险编译/安装它,以免破坏我的操作系统.
有人能给我一些关于最简单但最安全的升级/并行安装最新Perl版本的方法的指导吗?
我有一个下载文件的脚本,但这些文件在下载之前没有任何关于它们的信息.在为Linux编写时,我刚刚调用qx{ 'file ' . $filename }
它来查看它是否是JPEG图像,如果不删除它.但是,我现在正在尝试重写为独立于平台且纯Perl的形式.我已将所有调用转到system{ 'curl', $image_website }
LWP :: UserAgent调用,我希望有一些方法可以用某些东西替换对文件的调用.
如果我有一个简单的绑定标量类,每次读取时都会递增,我可以这样做:
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) 我正在构建一个模块,它连接到相机,拍照,并将数据读入一个小提琴.所有这些都发生在Inline :: C命令中.使用PDL文档中的过程,我可以创建pdl *
并返回它.然而,相机可能无法拍照,在这种情况下,我希望0
按照通常的协议返回my $pic_pdl = $Camera->TakePicture or die "Failed to take image"
.这似乎意味着我将需要使用该Inline_Stack_Push
机制,但我不知道如何正确地将其pdl *
转换为SV*
.如果可能的话,我也想设置$!
错误代码.可以在Inline中完成吗?
我想在我的主要布局中加载大部分脚本(即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的脚本引用不是最佳做法?
任何帮助深表感谢.我非常喜欢这一切.
干杯.
我有下面的代码,我试图只打印出这个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) 我正在编写一个非常简单的脚本,读取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 ×9
tie ×2
2d ×1
arrays ×1
constructor ×1
inline-c ×1
install ×1
javascript ×1
jquery ×1
linux ×1
mojo ×1
mojolicious ×1
pdl ×1
regex ×1
return-type ×1