2017-09-25 89 views
0

我试图从列表中检索使用perl使用另一个变量分配一个整数的元素。检索列表中的元素perl

use File::Copy qw(move) 
    my @List; 
    my $newDir = "foo/bar"; 
    my $file = "foo/bar.txt"; 
    push @List, $file; 
    my $file2 = "foo/bar2.txt"; 
    my $var = 1; 
    push @List, $file2; 
    move $List[$var-1], $newDir; 

而不是移动“文件”程序失败。

+0

什么是错误? –

+0

我没有得到一个(它结束,如果它成功),但该文件不会移动。我还应该注意到,我确实使用严格和警告。 – NotTheDoctor

回答

0
my $newDir = foo/bar; 

有引号的字符串周围缺少:

my $newDir = 'foo/bar'; 

,类似的还有其他路径。

另外,您确定要在move命令末尾使用带换行符的文件名吗?

而且,像

use File::Copy; 

丢失了。

此外,检查move返回值:

move $List[$var-1], $newDir or die $!; 
+0

只是说明这与实际代码没什么两样,但它足够接近,可以帮助我得到我认为需要的答案。我纠正了你为psuedocode指出的那些东西,甚至从实际代码中删除了新的行部分,但它仍然不起作用。 – NotTheDoctor

+0

@NotTheDoctor:你的意思是“不起作用”?任何错误消息?你检查'move'的返回值,如果它是0,你检查'$!'吗? – choroba

+0

对不起,它不移动文件。我可能应该解释一下发生了什么:脚本创建一个文件并在其中放入一堆数据,当它达到一定的限制(在这种情况下为10万行)时,它会创建一个新文件并将前一个文件移动到另一个文件目录。然后这个新文件将数据添加到它,直到发生同样的事情。问题是当创建这个新文件时,变量重新初始化后,存储文件名的变量将变回旧文件名。没有错误信息,脚本就结束了,即使在调试模式下,它也会结束,就像它成功了一样。 – NotTheDoctor

0

首先,你有没有列出你的代码。你有一个数组@List,但错误的变量不会改变它是什么。 Arrays are not lists。其次,您的代码完全按照我的预期工作。我在move调用中添加了错误报告。这可能有助于追踪您的问题,但我怀疑这是由于文件或目录不在您认为的位置。

$ cat move 
#!/usr/bin/perl 

use strict; 
use warnings; 

use File::Copy qw(move); 
my @List; 
my $newDir = "foo/bar"; 
my $file = "foo/bar.txt"; 
push @List, $file; 
my $file2 = "foo/bar2.txt"; 
my $var = 1; 
push @List, $file2; 
move $List[$var-1], $newDir or warn $!; 

$ find foo 
foo 
foo/bar 
foo/bar.txt 

$ perl move 

$ find foo 
foo 
foo/bar 
foo/bar/bar.txt