如何从列表中选择随机名称并将其存储在变量中?

时间:2009-10-23 00:07:39

标签: perl file-io

我已经开始向我的家人开发这个项目了,但是现在我需要将一个名字链接到另一个名字(请记住我拥有它的第一个名字)并且只在变量中存储第二个名字,记住这个list是一个带有一些名字的文件(* .txt),但我怎么做呢?感谢。

2 个答案:

答案 0 :(得分:6)

好的,您似乎想从文件中获取随机名称。假设这些名称在不同的行上,您可以执行以下操作(请阅读perldoc perlfunc中的内置randintchomp方法,了解它们的工作原理):

my @names = <>;
chomp(@names);
my $random_name = $names[int(rand(@names))];

将其分解为步骤,这就是它的作用:

  • 首先,我们在文件中读到。如果您将文件传输到脚本中(例如perl myscript.pl < names.txt),则可以使用<>直接从STDIN读取。
  • 然后,我们使用chomp删除每行中的所有换行符。
  • 现在我们想从列表中获取一个随机元素:
  • 标量上下文中的
  • @list获取列表中元素的数量(例如,4)
  • rand(4):获取0到4之间的随机数(所以我们可以得到0到3.999999之间的数字......)
  • int(some number from above)这是一个浮点数,所以让我们将它向下舍入(所以现在我们有0,1,2或3:这正是我们列表中可能的数组索引!
  • 使用它作为@list的数组索引,我们已经完成了!

答案 1 :(得分:2)

你问题中的英语非常糟糕,以至于我很难理解你在问什么。

但是这个怎么样?

use List::Util qw(shuffle);
my @array = shuffle(<>);
print shift @array;

从STDIN读取,您可以随时使用open打开文件,然后在文件句柄上使用。

这是文件IO:

use List::Util qw(shuffle);
open my $fh, "<", "out.txt";
my @array = shuffle(<$fh>);
print shift @array;
close $fh;