小编Dan*_*mer的帖子

如何将传递的数组引用直接移到数组?

我有一个函数(让我们称之为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代码的作者充满激情.请帮忙?

perl

5
推荐指数
3
解决办法
2100
查看次数

从Moose BUILD方法中呱呱叫

如果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 似乎没有受到影响.

我现在一直在反对这个问题,现在似乎无法弄清楚是什么弄乱了它.

谢谢.

perl moose carp

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

在 CentOS 上重新加载 php

我有一个在 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)

php linux centos nginx

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

Ruby:精简开始:未找到/ home / ubuntu的适配器

我试图在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

如何解决这个问题?

ruby thin

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

缩短代码:从哈希合并数组

我有一个哈希列表,一些哈希包含一个提供数组本身的键.

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.

有什么建议?

perl refactoring perl-hash perl-data-structures

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

在perl中,如何以这种理想的方式分割字符串?

我有一个字符串 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

怎么做到这一点?

perl split chop chomp

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

SQLite - NOT NULL约束失败

我正在尝试创建一个简单的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)

我收到了一个错误

NOT NULL constraint failed: ENTRIES.ID
Run Code Online (Sandbox Code Playgroud)

我假设这与ID和自动增量有关吗?我已阅读文档,并建议不要使用自动增量.我哪里错了?

sql sqlite constraints

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

如何在perl中调用子程序?

我尝试在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)

请帮助我并解释如何更正此程序.

perl subroutine malformed

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