我正在学习用Perl编写代码,我正在为荷兰语形容词编写一个结合符。我的ifelse和else块不会执行。我是编程新手,我不明白为什么会这样。运行代码不会产生语法错误;但它并不适用于else-block中的正则表达式。
$woord=shift(@ARGV); #read input word from cmd-line
$evorm=$woord;
$svorm=$woord;
$comp=$woord;
$compmete=$woord;
$compmets=$woord;
$super=$woord;
$supermete=$woord;
# vorm met -e #
if($evorm=~/ig\b/){
$evorm=~s/(.*)/\1e/; # add -e wordstem
print "vorm met buigings-e: $evorm\n";
}
elsif($evorm=~/@n\b/){
print "vorm met buigings-e: $evorm\n"; # print evorm ending in -@n (without adding final -e)
}
else{ #these are subsitutions for conjugation (regex is correct)
$evorm=~s/([^(oo)(ee)(aa)(uu)(ie)(eu)][aeiou])([bdfklnmprst])\b/\1\2\2/;# verdubbeling consonant voor volle klinker: dom > domme, fel > felle, gek > gekke, plat > platte
$evorm=~s/((aa)|(ee)|(oo)|(ie)|(eu)|(oe)|(ui))f\b/\1v/; # stemhebbend maken van -f-: lief > liev:
$evorm=~s/((aa)|(ee)|(oo)|(ie)|(eu)|(oe)|(ui))s\b/\1z/; # stemmehebbend maken van -s-: dwaas > dwaaz
$evorm=~s/([aeou])\1([bdfgklmnrstvz])\b/\1\2/; # dubbele klinker enkelvoudig maken voor medeklinkers: groot > grot, braav > brav
$evorm=~s/(.*)/\1e/; # voegt -e toe aan de (al dan niet voorbewerkte) stam
print "vorm met buigings-e: $evorm\n"; # print evorm
}
答案 0 :(得分:4)
为所有代码启用严格和警告;他们在那里帮助你。 (那么你需要实际声明所有变量。)运行以下代码片段,它会给你一个线索:
use strict;
use warnings;
my $evorm = '';
if ($evorm =~ /ig\b/) {
}
elsif ($evorm =~ /@n\b/) {
}
答案 1 :(得分:1)
我的猜测是你的结构不起作用,因为你没有检查任何东西。你只需要替换或删除字符串中的某些东西..
试试这个:将字符串保存在局部变量中,然后像这样匹配:
my $test1 = $evorm;
$test1 =~/ig\b/;
my $test2 = $evorm;
$test2 =~/@n\b/;
if($evorm eq $test1 ){
$evorm=~s/(.*)/\1e/; # voegt -e toe aan de (al dan niet voorbewerkte) stam
print "vorm met buigings-e: $evorm\n";
}
elsif($evorm eq $test2){
print "vorm met buigings-e: $evorm\n"; # druk evorm af die eindigt op -@n zonder -e toe te voegen
}
else{
.....
试试这个,所以现在你实际检查了一些东西;) 不知道那是不是你想要的?只是一个疯狂的猜测