如何将字符串转换为perl中的字符串数组?

时间:2014-04-11 01:24:22

标签: arrays string perl count

我正在尝试编写一个脚本,该脚本将从命令行中获取字符串和单个字符,然后在字符串中搜索单个字符的出现次数。我试图通过将字符串转换为数组并循环遍历数组的每个单独元素来尝试这样做,但每次尝试执行此操作时都会得到0。是否可以将字符串转换为单个字符数组,还是应该尝试新方法?

use strict;
use warnings;    
if ($ARGV[0] eq '' or $ARGV[1] eq '') {
        print "Usage: pe06f.pl string char-to-find\n";
        exit 1;
}
my $string = $ARGV[0];
my $searchChar = $ARGV[1];
if (length($searchChar) > 1) {
        print "Second argument should be a single character\n";
        exit 2;
}
my @stringArray = split /\./,$string;
my $count = 0;
$i = 0;
for ( $i=0; $i <= length($stringArray); $i++) {
        if ( $stringArray[$i] eq $searchChar) {
                print "found $b at position $i";
                $count++;
        }
}
print "found $count occurrences of $searchChar in $string\n";

1 个答案:

答案 0 :(得分:1)

你可以试试这个:

#!/usr/bin/perl

use warnings;
use strict;

my ($str, $chr) = @ARGV;

my $cnt = () = $str =~ m/$chr/g;
print "$cnt\n";

说明:

$cnt = () = $str =~ m/$chr/g会找出字符串$chr中有多少个字符$str匹配,以下是它实现的方式:

  1. $str =~ m/$chr/g将执行全局模式匹配(/g)和
  2. () = ...会将该模式匹配到列表上下文中,
  3. 因此它将返回所有匹配字符串的列表
  4. 最后$cnt = ...会将该列表放在标量上下文中,
  5. 因此$cnt的值将是该列表中元素的数量。