0

I am learning to code in Perl and I am writing a conjugator for Dutch adjectives. My ifelse and else block won't execute. I am totally new to programming and I don't see why this happens. Running the code does not give a syntax error; but it does not de to regex substituions in the 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
}
4

2 回答 2

4

为所有代码启用严格和警告;他们在那里帮助你。(然后,您将需要实际声明所有变量。)运行以下代码段,它将为您提供线索:

use strict;
use warnings;
my $evorm = '';
if ($evorm =~ /ig\b/) {
}
elsif ($evorm =~ /@n\b/) {
}
于 2013-05-27T14:39:22.280 回答
1

我的猜测是你的 if 结构不起作用,因为你没有检查任何东西。您只需替换或删除字符串中的某些内容..

试试这个:将字符串保存在局部变量中,然后像这样匹配它:

 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{
.....

试试这个,所以现在你实际上检查了一些东西;)不知道这是否是你想要的?只是一个疯狂的猜测

于 2013-05-27T14:31:59.630 回答