我有一个函数(让我们称之为foo($array_reference, ...)),它需要一个数组引用和其他参数.我希望foo将数组引用从传递给它的参数列表中直接移到数组,而不必将其作为数组引用移出,然后单独将其转换为数组.
我想要的应该是这样的:
my @bar = @{shift};
Run Code Online (Sandbox Code Playgroud)
我不想要的,但目前仍然坚持:
my $bar = shift;
my @bar = @{$bar}
Run Code Online (Sandbox Code Playgroud)
后一种方法浪费线条,浪费记忆,并让我讨厌这种类型的Perl代码的作者充满激情.请帮忙?
如果BUILD方法失败,我希望我的班级爆炸.但是,如果我croak用来处理错误,则会报告错误Class/MOP/Method.pm,而不是调用者的代码.(也就是说,实例化对象的调用者.)IOW,croak在调用树上没有吠叫.
看吧:
package Test;
use Moose;
use Carp 'croak';
sub BUILD {
croak 'u r dum';
}
1;
Run Code Online (Sandbox Code Playgroud)
实例化Test结果:
u r dum at /home/friedo/perl5/lib/perl5/x86_64-linux-gnu-thread-multi/Class/MOP/Method.pm line 125
Run Code Online (Sandbox Code Playgroud)
Carp.pm应该注意一个名为变量的包变量@CARP_NOT来知道要避免哪些包,但它似乎只关注列表中的一个项目.例如,如果我将其添加到我的Test.pm:
our @CARP_NOT = ( 'Class::MOP::Method' );
Run Code Online (Sandbox Code Playgroud)
然后结果是:
u r dum at /home/friedo/perl5/lib/perl5/x86_64-linux-gnu-thread-multi/Moose/Object.pm line 59
Run Code Online (Sandbox Code Playgroud)
所以我也应该将它添加到数组中,对吧?
our @CARP_NOT = ( 'Class::MOP::Method', 'Moose::Object' );
Run Code Online (Sandbox Code Playgroud)
然后结果仍然是:
u r dum at /home/friedo/perl5/lib/perl5/x86_64-linux-gnu-thread-multi/Moose/Object.pm line 59
Run Code Online (Sandbox Code Playgroud)
Moose::Object 似乎没有受到影响.
我现在一直在反对这个问题,现在似乎无法弄清楚是什么弄乱了它.
谢谢.
我有一个在 CentOS 上运行 nginx 的网络服务器。\n我更改了 php.ini 文件以增加一些限制,但是当我尝试重新启动 php 时,我收到错误消息:
\n\n[root@server ~]# php -v\nPHP 5.6.3 (cli) (built: Nov 23 2014 15:09:34)\nCopyright (c) 1997-2014 The PHP Group\nZend Engine v2.6.0, Copyright (c) 1998-2014 Zend Technologies\nwith the ionCube PHP Loader v4.7.1, Copyright (c) 2002-2014, by ionCube Ltd.\n\n[root@server ~]# systemctl restart php-fpm56.service\xe2\x80\x8f\nFailed to issue method call: Unit php-fpm56.service\\xe2\\x80\\x8f.service failed to load: No such file or directory.\n\n[root@server ~]# systemctl restart php56.service\nFailed to issue method call: Unit php56.service failed to load: No such file or directory.\n\n[root@server …Run Code Online (Sandbox Code Playgroud) 我试图在Amazon实例的Ubuntu上神奇地安装Image。
为此,我遵循了https://github.com/afeld/magickly上的参考。
在那里,我按照以下步骤在服务器上神奇地安装了Image。
$ gem install magickly
Run Code Online (Sandbox Code Playgroud)
之后,我在给定命令下使用安装了“瘦”宝石。
$ gem install thin
Run Code Online (Sandbox Code Playgroud)
然后,我尝试thin使用以下命令启动gem。
$ thin start
Run Code Online (Sandbox Code Playgroud)
但这给了我错误: No adapter found for /home/ubuntu
如何解决这个问题?
我有一个哈希列表,一些哈希包含一个提供数组本身的键.
my @cars = (
{ # empty car
name => "BMW",
},
{ # car with passengers
name => "Mercedes",
passengers => [qw(Paul Willy)],
},
...
)
Run Code Online (Sandbox Code Playgroud)
它几乎就像上面但当然不是以愚蠢的汽车为例:-)
现在我需要从所有哈希中获得所有"乘客"的列表,包括那些甚至不提供乘客阵列的乘客.
在第二步中,我需要从列表中检索唯一条目(实际上乘客是Perl对象引用,我需要列表中的每个对象一次)
目前我这样做:
my (@all, @passengers, %seen);
for(@cars) {
push @all, @{$_->{passengers}} if $_->{passengers};
}
@passengers = grep { ! $seen{$_} ++ } @all;
Run Code Online (Sandbox Code Playgroud)
我想摆脱@all并将所有乘客的名单直接扔进去grep.
有什么建议?
我有一个字符串 str a\tb\tc\td\te
我希望第一个字段值a进入变量,然后第二个字段值b进入其他变量,然后c\td进入第三个变量和最后一个字段值e进入一个变量.
如果我做
my ($a,$b,$c,$d) = split(/\t/,$_,4);
Run Code Online (Sandbox Code Playgroud)
$c只会收购c和$d将收购d\te
我可以:
my ($a,$b,$c) = split(/\t/,$_,3);
Run Code Online (Sandbox Code Playgroud)
然后c会得到c\td\te
,我可以以某种方式(如何?)摆脱最后的价值并把它拿进去$d
怎么做到这一点?
我正在尝试创建一个简单的SQLite数据库,允许我存储电子邮件地址和时间戳.我创建了这样的表:
$sql =<<<EOF
CREATE TABLE ENTRIES
(ID INT PRIMARY KEY NOT NULL,
EMAIL EMAIL NOT NULL,
TIMESTAMP DATETIME DEFAULT CURRENT_TIMESTAMP);
EOF;
Run Code Online (Sandbox Code Playgroud)
我正在尝试插入这样的电子邮件:
$sql =<<<EOF
INSERT INTO ENTRIES (EMAIL)
VALUES (test@test.com);
EOF;
Run Code Online (Sandbox Code Playgroud)
我收到了一个错误
Run Code Online (Sandbox Code Playgroud)NOT NULL constraint failed: ENTRIES.ID
我假设这与ID和自动增量有关吗?我已阅读文档,并建议不要使用自动增量.我哪里错了?
我尝试在Perl中调用子例程,但是我得到了这个错误"Malformed prototype for main".我有一个子程序比较,我必须传递给它两个整数.
#!/usr/bin/perl
@ListA=(1,2,3);
@ListB=(2,3,4);
@ListResult;
#AND
sub Compare($p1,$p2){
if($p1 > sizeof(ListA) or $p2 > sizeof(ListB))
{
return;}
if(ListA($p1) = ListB($p2)){
push (@ListResult, ListA($p1));
Compare($p1+1,$p2+1);
return;
}
if(ListA($p1) > ListB($p2)){
Compare($p1,$p2+1);
return;
}
else {
Compare($p1+1,$p2);
return;
}
return;
}
Compare(1,1);
Run Code Online (Sandbox Code Playgroud)
请帮助我并解释如何更正此程序.