所以这就是我正在做的事情。这是为了做作业,我知道我不能来这里让你们为我做功课,但我被困住了。我们必须使用perl(第一次使用它以便原谅我的愚蠢)来创建一个带有参数$ str0和$ prefix的函数$ starts_with。如果$ str0以$前缀开头。然后该函数返回true。如果没有那么它就不那么简单了。我们必须使用正则表达式,因为这是练习的重点,所以这里是我的代码
sub starts_with
{
$str0 = $_[0];
$prefix = $_[1];
if($prefix =~ /^($str0)/)
{
print $str0."\n";
print m/^(prefix)/."\n";
$startsWith = "Y"
}
if ($startsWith eq "Y")
{
print $str0." starts with ".$prefix."\n";
}
else
{
print $str0." does not start with ".$prefix."\n";
}
}
我很惭愧把它放在这里,因为我不知道我在做什么。但我正在努力学习。我不知道如何在perl中做真假,这就是为什么我有$ startsWith变量。如果你愿意,你可以解决这个问题。我需要解决的部分是行
if(str0 =~ /^($prefix)/)
我还需要找出如何引用str0中的第一个字母......我想
答案 0 :(得分:3)
有几点没有给出答案:
1)函数的参数在名为@_
的特殊变量中传递,这是您在说$_[0]
和$_[1]
时所访问的内容,但可以更简洁地编写将参数列表(@_
)分配给list context
sub starts_with {
my ($str0, $prefix) = @_;
...
}
2)这句话:if($prefix =~ /^($str0)/)
测试你试图证明的完全相反的条件。它说前缀是以变量$str0
的值开头的。如果$str0
以$prefix
开头,您真正想要测试的是什么。
它也可能用于在模式前添加m标志m/PATTERN
,这意味着匹配此模式。
3)你的函数中没有return语句,(如@ M42指出)返回最后一个表达式的结果;表达式print
将返回true。您可能想要返回真或假的明确。
看看你是否可以使用它来开始。
答案 1 :(得分:1)
我会做什么:
use Modern::Perl; # or use strict; use warnings; use feature qw/say/;
sub starts_with {
# better use @_, the default array instead of just elements of them
# ...like $_[0]
my ($str, $pref) = @_;
# very short expression, the pattern matching return a boolean.
# \Q\E is there to treat the prefix as-is (no metacharacters)
return $str =~ /^\Q$pref\E/;
}
# using our function
if (starts_with("foobar", "f")) {
say "TRUE";
}
else {
say "FALSE";
}
答案 2 :(得分:0)
稍微打高尔夫球......
sub starts_with { $_[0] =~ /^\Q$_[1]/ }
不要把那个版本交给: - )