我正在学习perl和regex.以下代码:
my $data = "Bule beatles battling a blowing breeze";
my $results = $data =~ m/beatles battling/;
print "results: $results\n";
Run Code Online (Sandbox Code Playgroud)
产生这个输出:
C:\scripts\perl\sandbox>regex.pl
results: 1
Run Code Online (Sandbox Code Playgroud)
通过一个小的改变,我得到了我想要的结果:
print "results: $&\n";
results: beatles battling
Run Code Online (Sandbox Code Playgroud)
我还注意到我不需要创建$ results:
my $data = "Bule beatles battling a blowing breeze";
$data =~ m/beatles battling/;
print "results: $&\n";
Run Code Online (Sandbox Code Playgroud)
在我一直在阅读的各种perl教程中,一些示例使用以下语法:
my $results = $data =~ m/string_to_match/;
Run Code Online (Sandbox Code Playgroud)
我的问题:
例如:
my $data = "Bule beatles battling a blowing breeze";
my $results1 = $data =~ m/beatles/; …Run Code Online (Sandbox Code Playgroud) 我正在尝试用字符串替换逗号或连字符的所有实例$charlie.这是我最初尝试的代码:
#!/usr/bin/perl
use strict;
use warnings;
my $charlie = "Charlie, 59, 2009";
print "Old Charlie: $charlie\n";
$charlie =~ s/[\,-]/ /;
print "New Charlie: $charlie\n";
Run Code Online (Sandbox Code Playgroud)
这会产生输出:
C:\scripts\perl\sandbox>charlie_substitute.pl
Old Charlie: Charlie, 59, 2009
New Charlie: Charlie 59, 2009
Run Code Online (Sandbox Code Playgroud)
如您所知,只有第一个逗号被空格替换.为了考虑多个逗号,我将正则表达式更改为$charlie =~ s/[\,-]{1,2}/ /;但仍然得到相同的输出.
如何正确指定替换中要查找的出现次数?
我试图使用split()提取值tiefighter.com的leia@tiefighter.com.我发现如果@输入字符串中的字符被转义,我得到预期的输出:
$ perl -e '$string = "leia\@tiefighter.com"; @parts = split(/\@/, $string); print "Domain: $parts[-1]\n";'
Domain: tiefighter.com
Run Code Online (Sandbox Code Playgroud)
但是,如果我不逃避@角色,我会得到这个:
$ perl -e '$string = "leia@tiefighter.com"; @parts = split(/\@/, $string); print "Domain: $parts[-1]\n";'
Domain: leia.com
Run Code Online (Sandbox Code Playgroud)
鉴于我无法预测输入字符串,分割的正确方法是@什么?
我试图从子程序返回一个匿名数组,但是,当转储返回的变量时,我只看到一个值(我期待两个).
这是我的代码:
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
my $fruits_ref = generate_fruits();
print "Fruits: " . Dumper($fruits_ref) . "\n";
sub generate_fruits
{
return ("Apple", "Orange");
}
Run Code Online (Sandbox Code Playgroud)
这输出:
Fruits: $VAR1 = 'Orange';
Run Code Online (Sandbox Code Playgroud)
如何让子程序返回该数组ref?