Perl如何实现删除单词中非首字母位置的所有元音字符?
代码问题修正与正确实现
原有代码的问题
- 单词分割逻辑错误:使用了中文引号作为分隔符,无法正确按空格拆分文本,应使用空白字符正则
/\s+/作为split的参数 - 循环语法不符合Perl规范:遍历数组的语法错误,也没有单独处理首字母与后续字符的逻辑
- 字符替换逻辑错误:直接对整个单词执行元音删除操作,会把首字母的元音也一并删除,且tr操作符的参数写法错误
- 输出变量错误:处理的是单词数组
@words,最终打印却调用了未定义的标量$words
正确实现代码
# 定义待处理文本 my $text = "I like apples more than oranges\n"; # 按空白字符分割为单词数组 my @words = split /\s+/, $text; foreach my $word (@words) { # 单字符单词无需处理直接跳过 next if length($word) <= 1; # 拆分首字母与剩余字符 my $first = substr($word, 0, 1); my $remain = substr($word, 1); # 删除剩余字符中的所有元音 $remain =~ tr/AEIOUaeiou//d; # 拼接后替换原单词 $word = $first . $remain; } # 拼接处理后的单词为完整文本并输出 my $output = join ' ', @words; print $output."\n";
运行结果
执行代码后输出内容为:I lk appls mr thn orngs,符合需求。
内容的提问来源于stack exchange,提问作者Traveller
相关产品推荐
相关产品推荐

