小编Axe*_*man的帖子

在Perl 6的这一侧有懒惰列表的Perl解决方案吗?

有人在Perl中为懒惰评估的列表找到了一个很好的解决方案吗?我已经尝试了很多方法来改变类似的东西

for my $item ( map { ... } @list ) { 
}
Run Code Online (Sandbox Code Playgroud)

例如,通过绑定@list进入懒惰的评估.我试图避免分解和编写源过滤器来执行此操作,因为它们会影响您调试代码的能力.有没有人取得任何成功.或者你只需​​要分解并使用while循环?

注意:我想我应该提一下,我有点迷上了有时用于功能转换列表的长grep-map链.所以它不是foreach循环或while循环.这就是地图表达式倾向于将更多功能打包到同一垂直空间中.

perl source-filter lazylist

11
推荐指数
4
解决办法
1167
查看次数

perl 5.12.2中是否存在使用@ISA拼接的问题?

以下是Perl 5.12上的调试会话.这有意义吗?是否UNIVERSAL缓存版本的@ISA变量,如果永远采用随后上.回到之前Class::ISA不推荐使用,我曾经打电话Class::ISA::self_and_super_path让内部人员重新看一下@ISA阵列.既然现在认为没必要,你如何让perl审核其内部记录?

DB<34> p $papa
Papushka=HASH(0x16bc0300)

DB<35> p $papa->isa('Nanushka')

DB<36> p $papa->isa('Babushka')
1

DB<37> x @Papushka::ISA
0  'Nanushka'
1  'Babushka'
Run Code Online (Sandbox Code Playgroud)

这是测试代码(显然).它获得相同的结果,运行平稳,作为测试运行或在调试中运行.我应该告诉你,在此之前@ISA = qw<Babushka>,我表演了

splice( @ISA, 0, 0, 'Nanushka' );
Run Code Online (Sandbox Code Playgroud)

那是问题吗?如果你永远只能push@ISA

oop perl universal

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

为阻塞操作启动新线程是不好的做法(Perl)

如果执行CPU密集型任务,我认为每个核心有一个线程是最佳的.如果你有一个4核CPU,你可以运行4个CPU密集子程序实例而不会受到任何惩罚.例如,我曾经在四核CPU上实验性地运行了四个CPU密集型算法实例.每个过程最多四次没有减少.在第五个实例中,所有实例都需要更长

阻止操作的情况如何?假设我有一个包含1,000个网址的列表.我一直在做以下事情:

(请不要介意任何语法错误,我只是嘲笑这个)

my @threads;
foreach my $url (@urlList) {    
     push @threads, async {
         my $response = $ua->get($url);
         return $response->content;   
     }
}

foreach my $thread (@threads) {
    my $response = $thread->join;
    do_stuff($response); 
}
Run Code Online (Sandbox Code Playgroud)

我基本上开始了与URL列表中的URL一样多的线程.如果有一百万个网址,则会启动一百万个主题.这是最优的,如果不是最佳线程数吗?对于可以等待的任何阻塞I/O操作(读取文件,数据库查询等),使用线程是一种很好的做法吗?

相关奖金问题

出于好奇,Perl线程的工作方式与Python相同,而且它是GIL吗?使用python来获得多线程的好处,并将所有内核用于CPU密集型任务,您必须使用多处理.

perl multithreading thread-safety blocking

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

你如何在穆斯创建子类型?

我刚刚开始使用驼鹿.

我正在创建一个简单的通知对象,并希望检查输入是否为"电子邮件"类型.(暂时忽略简单的正则表达式匹配).

从文档中我相信它应该类似于以下代码:

# --- contents of message.pl --- #
package Message;
use Moose;

subtype 'Email' => as 'Str' => where { /.*@.*/ } ;

has 'subject' => ( isa => 'Str', is => 'rw',);
has 'to'      => ( isa => 'Email', is => 'rw',);

no Moose; 1;
#############################
package main;

my $msg = Message->new( 
    subject => 'Hello, World!', 
    to => 'coolkids@example.com' 
);  
print $msg->{to} . "\n";
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

String found where operator expected at message.pl line 5, near …

perl types moose

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

如何访问嵌套Perl哈希的值?

我是Perl的新手,我有一个非常简单的问题,但在查阅我的Perl书时我找不到答案.

打印结果时

Dumper($request);
Run Code Online (Sandbox Code Playgroud)

我得到以下结果:

$VAR1 = bless( {
             '_protocol' => 'HTTP/1.1',
             '_content' => '',
             '_uri' => bless( do{\(my $o = 'http://myawesomeserver.org:8081/counter/')}, 'URI::http' ),
             '_headers' => bless( {
                                    'user-agent' => 'Mozilla/5.0 (X11; U; Linux i686; en; rv:1.9.0.4) Gecko/20080528 Epiphany/2.22 Firefox/3.0',
                                    'connection' => 'keep-alive',
                                    'cache-control' => 'max-age=0',
                                    'keep-alive' => '300',
                                    'accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
                                    'accept-language' => 'en-us,en;q=0.5',
                                    'accept-encoding' => 'gzip,deflate',
                                    'host' => 'localhost:8081',
                                    'accept-charset' => 'ISO-8859-1,utf-8;q=0.7,*;q=0.7'
                                  }, 'HTTP::Headers' ),
             '_method' => 'GET',
             '_handle' => bless( \*Symbol::GEN0, 'FileHandle' )
           }, 'HTTP::Server::Simple::Dispatched::Request' );
Run Code Online (Sandbox Code Playgroud)

如何访问'_method'('GET')或'host'('localhost:8081')的值.

我知道这是一个简单的问题,但Perl在开始时有点神秘.

perl hash perl-data-structures

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

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

在Perl中动态/递归地构建哈希?

我是Perl的新手,我正试图递归地构建一个哈希并且无处可去.我尝试搜索动态构建哈希的教程,但我能找到的只是关于哈希的介绍性文章.如果你指出我正确的方向或建议一篇好文章/教程,我将不胜感激.

我试图从一个文件中读取具有路径的文件

one/two/three
four
five/six/seven/eight
Run Code Online (Sandbox Code Playgroud)

我想建立像哈希一样的哈希

VAR = {
    one : {
        two : {
            three : ""
        }
    }
    four : ""
    five : {
        six : {
            seven : {
                 eight : ""
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我目前使用的脚本是:

my $finalhash = {}; 
my @input = <>;

sub constructHash {
    my ($hashrf, $line) = @_; 
    @elements = split(/\//, $line);
    if(@elements > 1) {
        $hashrf->{shift @elements} = constructHash($hashrf->{$elements[0]}, @elements ); 
    } else {
        $hashrf->{shift @elements} = ""; 
    }
    return $hashrf; …
Run Code Online (Sandbox Code Playgroud)

recursion perl hash perl-data-structures

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

如何在Perl中创建哈希散列?

基于我目前对Perl中哈希的理解,我希望这段代码可以打印出"hello world".它没有打印任何东西.

%a=();

%b=();
$b{str} = "hello";  
$a{1}=%b;

$b=();
$b{str} = "world";
$a{2}=%b;

print "$a{1}{str}  $a{2}{str}"; 
Run Code Online (Sandbox Code Playgroud)

我假设散列就像一个数组,为什么我不能让散列包含另一个?

perl hash perl-data-structures

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

Unpythonic在Python中打印变量的方法?

最近有人告诉我,我们可以在Python中打印变量,就像Perl一样.

代替:

print("%s, %s, %s" % (foo, bar, baz))
Run Code Online (Sandbox Code Playgroud)

我们可以这样做:

print("%(foo)s, %(bar)s, %(baz)s" % locals())
Run Code Online (Sandbox Code Playgroud)

像在Perl中那样,在Python中打印变量的方式是不是很简单?我认为第二个解决方案实际上看起来非常好并且使代码更具可读性,但是那里的locals()让它看起来像是一种令人费解的方式.

python

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

如何将die函数的输出重定向到Perl中的文件?

我想将die消息重定向到一个单独的文件,以便我可以稍后比较该文件以确定出错的地方.

但是这段代码给了我错误:

$ cat test.pl
use strict;
use warnings;

my $log = "msglog.log";
die $log "DEAD$!";

$ perl test.pl
Missing comma after first argument to die function at test.pl line 5, near ""DEAD$!";"
Execution of test.pl aborted due to compilation errors.
$ 
Run Code Online (Sandbox Code Playgroud)

我不想2>从来电者那里做一个.有没有办法从脚本中重定向它们?

perl die perl-io

7
推荐指数
3
解决办法
9843
查看次数