ここにPerlの新人がいるので、優しくしてください:)
私は狩りをしているときに犬を追跡するために次のコードを書きました(実際にはそうではありません)。犬がアヒルを見つけるたびに、メインスレッドに信号を送り、メインスレッドはパック内の各犬から情報を収集します。
#!/usr/bin/env perl
use strict;
use warnings;
use v5.14;
use threads;
{
package Dog;
sub new {
my ($class, $name, $dt) = @_;
my $self = {
dt => $dt, # will find a duck every $dt seconds
name => $name,
ducksfound => 0
};
bless $self, $class;
}
sub hunt {
#
# the "thread" method -- the dog will hang around for $dt seconds,
# then alert the main thread by sending SIGUSR1
#
my $self = shift;
while (1) {
sleep $self->{dt};
$self->{ducksfound} += 1;
kill USR1 => $$;
}
}
sub bark {
my $self = shift;
sprintf "%s: found %d ducks!", ($self->{name}, $self->{ducksfound});
}
1;
}
my @dogs;
$SIG{USR1} = sub {
say join ", ", map { $_->bark } @dogs;
};
push @dogs, Dog->new("Labrador", 1);
push @dogs, Dog->new("Retriever", 2);
push @dogs, Dog->new("Shepherd", 3);
threads->create( sub { $_->hunt } ) for @dogs;
$_->join for threads->list;
上記のコードの期待される出力は次のようになります。
ラブラドール:1羽のアヒルが見つかりました!、レトリバー:0羽のアヒルが見つかりました!、シェパード:0羽のアヒルが見つかりました!
ラブラドール:2羽のアヒルが見つかりました!、レトリバー:0羽のアヒルが見つかりました!、シェパード:0羽のアヒルが見つかりました!
ラブラドール:3羽のアヒルが見つかりました!、レトリバー:0羽のアヒルが見つかりました!、シェパード:0羽のアヒルが見つかりました!
ラブラドール:3羽のアヒルが見つかりました!、レトリバー:1羽のアヒルが見つかりました!、シェパード:0羽のアヒルが見つかりました!
ラブラドール:4羽のアヒルが見つかりました!、レトリバー:1羽のアヒルが見つかりました!、シェパード:0羽のアヒルが見つかりました!
ラブラドール:5羽のアヒルが見つかりました!、レトリバー:1羽のアヒルが見つかりました!、シェパード:0羽のアヒルが見つかりました!
ラブラドール:6羽のアヒルが見つかりました!、レトリバー:1羽のアヒルが見つかりました!、シェパード:0羽のアヒルが見つかりました!
ラブラドール:6羽のアヒルが見つかりました!、レトリバー:1羽のアヒルが見つかりました!、シェパード:0羽のアヒルが見つかりました!
ラブラドール:6羽のアヒルが見つかりました!、レトリバー:1羽のアヒルが見つかりました!、シェパード:1羽のアヒルが見つかりました!
代わりに、私が得るものは次のとおりです。
ラブラドール:1羽のアヒルが見つかりました!、レトリバー:0羽のアヒルが見つかりました!、シェパード:0羽のアヒルが見つかりました!
ラブラドール:2羽のアヒルが見つかりました!、レトリバー:0羽のアヒルが見つかりました!、シェパード:0羽のアヒルが見つかりました!
ラブラドール:3羽のアヒルが見つかりました!、レトリバー:0羽のアヒルが見つかりました!、シェパード:0羽のアヒルが見つかりました!
ラブラドール:アヒルが0匹見つかりました!、レトリバー:アヒルが1匹見つかりました!、シェパード:アヒルが0匹見つかりました!
ラブラドール:4羽のアヒルが見つかりました!、レトリバー:0羽のアヒルが見つかりました!、シェパード:0羽のアヒルが見つかりました!
ラブラドール:5羽のアヒルが見つかりました!、レトリバー:0羽のアヒルが見つかりました!、シェパード:0羽のアヒルが見つかりました!
ラブラドール:アヒルが0匹見つかりました!、レトリバー:アヒルが2匹見つかりました!、シェパード:アヒルが0匹見つかりました!
ラブラドール:アヒルが0匹見つかりました!、レトリバー:アヒルが0匹見つかりました!、シェパード:アヒルが1匹見つかりました!
他の犬が話しているときに、すべての犬のアヒルの数がゼロにリセットされることに注目してください。
ラマを読んでいる間、私がどの特定の脚注に目を通したに違いないかについての洞察はありますか?