【求助】使用变量充当正则匹配模式时的引号问题

【求助】使用变量充当正则匹配模式时的引号问题

【求助】使用变量充当正则匹配模式时的引号问题
1 该问题不是关于正则的具体用法,而是将匹配模式当作参数传进去的时候出现的问题,说啥也没例子清楚,请看:

sub func($$){
my ($str, $pattern) = @_;
print "\$pattern=$pattern\n";
if([b][color=red]$str =~ $pattern[/color][/b]){
print 'matched';
}
}
func("hello world", [b][color=red]"[/color][/b]/hello/[b][color=red]"[/color][/b]);

输出为:
$pattern=/hello/

我的疑惑是为啥这样就匹配不到,按说应该可以。

perl的官方网站上有个用户自定义的例子,但是他是这样的:

if($str =~ [b][color=red]/[/color][/b]$pattern[b][color=red]/[/color][/b])

但是这样就无法在后面加上修饰符了,比如: "/hElLo/[b][color=red]i[/color][/b]"

Perl刚开始学,可能有些地方理解不是很深刻,请大家帮忙,谢谢。




   

solution 1:----[quot.
solution 1:

[quote]sub func($$){
my ($str, $pattern) = @_;
print "\$pattern=$pattern\n";
if(eval($str =~ $pattern)){
print 'matched';
}
}
func("hello world", qr/hello/);[/quote]
solution 2:----[quot.
solution 2:

[quote]sub func($$){
my ($str, $pattern) = @_;
print "\$pattern=$pattern\n";
if(eval($str =~ /$pattern/)){
print 'matched';
}
}
func("hello world", "hello");

[/quote]
能不能有这么一种方法实现.
能不能有这么一种方法实现sub func,使得我调用的时候的代码可以是这样:

func("hello world", "/hello/is");

或者

func("hello world", '/hello/is');

关键是后面可以带修饰符
使用 (?imsx-imsx) 或 (?i.
使用 (?imsx-imsx) 或 (?imsx-imsx:regex) :

sub func($$){
my ($str, $pattern) = @_;
print "\$pattern=$pattern\n";
if(eval($str =~ /$pattern/)){
print 'matched';
}
}
func("hello world", '(?is)hello');

查看 perldoc perlretut。
谢谢上面各位,搞定了
sub func($$) {
my($str,$pattern)=@_;
print "\$pattern=$pattern\n";
if(eval "\$str =~ $pattern") {
print "matched\n";
}
}
func("hello world!","/hello/is")