Arrays 如何在Perl中将多个集合的每个笛卡尔积(动态输入)打印到新的分离文件中?

Arrays 如何在Perl中将多个集合的每个笛卡尔积(动态输入)打印到新的分离文件中?,arrays,perl,element,combinations,auto-generate,Arrays,Perl,Element,Combinations,Auto Generate,我打算制作一个生成新文件的程序,其中包含来自多个数组的元素组合 首先,程序提示用户输入文件名。 每个文件每行包含一个单词。 每个文件都将被视为一个数组,每行的内容都是数组元素 然后程序将获取这些数组元素文件内容的所有可能组合, 并将每个组合打印到新文件中。 因此,创建的新文件将尽可能多地进行组合 例如: file1.txt: f1a f1b file2.txt: f2a f2b f2c 说明: '>perl combine.pl '>要组合的文件名:file1.txt file2.txt 结果:

我打算制作一个生成新文件的程序,其中包含来自多个数组的元素组合

首先,程序提示用户输入文件名。 每个文件每行包含一个单词。 每个文件都将被视为一个数组,每行的内容都是数组元素

然后程序将获取这些数组元素文件内容的所有可能组合, 并将每个组合打印到新文件中。 因此,创建的新文件将尽可能多地进行组合

例如: file1.txt: f1a f1b

file2.txt: f2a f2b f2c

说明:

'>perl combine.pl '>要组合的文件名:file1.txt file2.txt 结果: '>file1.txt=2个元素。 file2.txt=3个元素。 组合成功生成6个文件

在同一目录下,程序生成6个文件组合结果。 结果-1.txt f1a f2a

结果-2.txt f1a f2b

结果-3.txt f1a f2c

结果-4.txt f1b f2a

结果-5.txt f1b f2b

结果-6.txt f1b f2c

以下是我的一些代码:

combine.pl:

这就是我到目前为止所做的, 动态获取文件输入的内容, 并将每个文件内容放入一个数组中,我希望这样更容易合并

我已经更新了这个问题,并清理了一些代码。
问题是这样的;如何将这些输入中的每个笛卡尔叉积打印到新的独立文件中,如上图所示。

我将把解密作为OP的练习,直到他们澄清它是否是家庭作业。将文件名作为参数传入命令行上的以下脚本:

use strict;
use warnings;
use File::Slurp qw< read_file write_file >;
use List::Gen   qw< cartesian >;

my $counter;
my @slurped_files   = map { my @file = read_file($_); [ @file ] } @ARGV;
my @resultant_files = cartesian { [ @_ ] } @slurped_files;

$counter++, write_file( @$_, "result-$counter.txt" ) for @resultant_files;

三行完成的繁重工作。必须爱CPAN:

这闻起来像是家庭作业,我没有看到任何试图解决上述代码中的问题的尝试。你能描述一下你将如何得到两个元素数组的每一个可能的组合,然后发布代码试图用它们做些什么吗?脚本结束的方式很搞笑。打印@b;死亡最后:我更新了上面的一些代码和解释。是的,CPAN解决方案用三行代码让我惊讶,但我希望没有CPAN的情况下能有任何常规解决方案的想法:'+1,也许还有我的$counter=0;我很感激你告诉我如何与CPAN合作。我附加了我自己编写的代码,即使这很奇怪,因为我是全新的&必须面对一些条件才能使用perl编写代码,因此代码可能会与其他语言语法混合。所以,对于粗鲁的代码,我很抱歉,我知道我必须学会用perl很好地编写代码。但它不喜欢我可以复制粘贴的作业
use strict;
use warnings;
use File::Slurp qw< read_file write_file >;
use List::Gen   qw< cartesian >;

my $counter;
my @slurped_files   = map { my @file = read_file($_); [ @file ] } @ARGV;
my @resultant_files = cartesian { [ @_ ] } @slurped_files;

$counter++, write_file( @$_, "result-$counter.txt" ) for @resultant_files;