如何使用Perl计算字符串中的特定字符

时间:2013-12-19 21:38:02

标签: perl scripting

我有一个用于创建文件的Perl脚本。

我有一个变量,它包含许多以逗号分隔的文件路径。

path/to/file1,path/to/file2....path/tofileN

根据返回的文件路径数量,我需要创建另一个创建随机字符串的字符串,以匹配每个文件最多N个文件

如果我的第一个字符串变量包含3个文件路径,我需要创建一个像

这样的字符串
RandomName1,RandomName2,RandomName3

并将其写入我的输出文件。

  • 如何解析传入的文件路径字符串以确定总共有多少文件路径?

  • 如何编写循环为每个传入文件路径创建文件名,最多N个文件?

2 个答案:

答案 0 :(得分:2)

我不太清楚你为什么要把名字列表放到一个单独的字符串中,但是我们走了。

use strict;
use warnings;

sub create_random_name {
  # return a random filename
}

my $foo = '/home/foo,/root,/dev/null';
my @filenames;

foreach (split ',', $foo) {
  push @filenames, create_random_name();
}

print  join ',', @filenames;

__END__
   efe277fe7aa54f7231dedef7ac8c1e3a,327f56cff4bd21b03ee3ceaa4280014c,7f1ca3feb3b51f7a9ee84f08b1791785

我们来看看。

  • 我创建了一个应该返回一些随机性的子create_random_name。如果没有进一步说明你需要什么,我会把它留在答案之外。
  • 我们split你的一串路径到一个数组,但由于你不想要它们,我们只循环遍历结果。由于同样的原因,my $bar中没有foreach
  • 我们只想为与路径相同数量的文件创建create_random_name。这些被推入@filenames
  • 然后我们, $foo使{{1}}看起来与我们的起点相同,{{1}}中的列表。

答案 1 :(得分:0)

对于1),你可能想要split正如RC所说的那样。对于2),File::Temp应该可以做到。

use File::Temp 'tempfile';

my $orig_path_str = 'path/to/file1,path/to/file2....path/tofileN';
@orig_paths = split(/,/, $orig_path_str);

my @random_paths;
# loops number of times equalling your number of paths
foreach (1..scalar(@orig_paths)) {   
    my ($fh, $filename) = tempfile();
    push(@random_paths, $filename);
}
my $random_path_str = join(',', @random_paths);