2017-09-25 113 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