在下面的代碼中,我試圖創建我想在多線程中使用的正則表達式。 問題是,當使用傳遞到線程中的正則表達式時,它被編譯爲'Regexp = SCALAR(0x268aed0)'而不是'(?-xism:(testme))',因此正則表達式不起作用。在perl中使用編譯正則表達式在線程中
誰能告訴我爲什麼這樣做?
我使用的是perl v5.10.1。
#/usr/bin/perl
use threads;
use Thread::Queue;
my $q = Thread::Queue->new();
my @threads;
for (1..2) {
push @threads, async {
while (defined(my $source = $q->dequeue())) {
my $text = "I want you to testme
andmetoo please";
my $re = $source->{regex};
print "testing regex: " . $re . " for source $source->{id}\n";
if ($text =~ $re) {
print "GOT IT: " . $1 . "\n";
}
}
}
}
my @sources = (
{
regex => qr/(testme)/,
id => 's1'
},
{
regex => qr/(andmetoo)/,
id => 's2'
}
);
for (@sources) {
print "adding source with regex $_->{regex} for source $_->{id}\n";
$q->enqueue($_);
}
$q->enqueue(undef) for @threads;
$_->join() for @threads;
的代碼的輸出上面:
adding source with regex (?-xism:(testme)) for source s1
adding source with regex (?-xism:(andmetoo)) for source s2
testing regex: Regexp=SCALAR(0x268aed0) for source s1
testing regex: Regexp=SCALAR(0x268aee8) for source s2
謝謝,這幫了我很多! – sva