Perl ifelse和else-block无法正常工作

时间:2013-05-27 14:24:40

标签: regex perl

我正在学习用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
}

2 个答案:

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

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