2014-10-22 55 views
1

我試圖使用perl將這些文件從一個文件夾複製到另一個文件夾。這些文件夾將作爲用戶的輸入傳遞。複製文件時未定義的子程序調用

例子:

First folder : \\filesource\source 
Target folder: \\filesource\destination 

,但在複製文件時,我得到以下提到的錯誤:

Undefined subroutine &main::Copy called 

代碼:

use strict; 
use File::Copy; 
my $errExitCode_const = 1; 
unless(@ARGV == 2){ 
    print "$0 - requires 2 input parameters and only " . 
     @ARGV ." are being passed. \n$!\n"; 
    exit($errExitCode_const); 
} 

## Get parameters 
my $source_dir = $ARGV[0]; 
my $dest_dir = $ARGV[1]; 

## Initiazise Variables 
my @files; 
my $file_name; 
my $filename; 
my $dt_stamp; 

## Change the directory path. 
chdir($source_dir); 

# Reads all files from the input directory. 
@files = <*>; 

foreach $filename(@files) { 
    $file_name = substr($filename,0,19); 
    print "\nfile_name:" . $file_name; 
    if($file_name =~ "PROVIDER_KEY_IN_IGF") { 
     Copy($file_name,$dest_dir.$file_name) 
      or die "Failed to copy $file_name :$!\n"; 
    } 
    #Delete input file #unlink($filename); 
} ## End foreach 
+2

您是否檢查過[文件::複製](http://perldoc.perl.org/File/Copy.html)?你應該使用'copy($ file_name,$ dest_dir。$ file_name);' – 2014-10-22 11:02:49

+0

'File :: Copy :: copy'也可以做到這一點。 – Sobrique 2014-10-22 14:01:35

回答

2

從文檔File::Copy

The File::Copy module provides two basic functions, copy and move , which are useful for getting the contents of a file from one place to another.

您需要使用該模塊提供的功能,叫不上名字調用模塊。

這條線:

File::Copy($file_name,$dest_dir.\$file_name) 
    or die "Failed to copy $file_name :$!\n"; 

因此應該

copy($file_name, $dest_dir.$file_name) or die ...; 

如果你想在文件名前添加一個斜槓,則需要在引號中,要麼把$dest_dir$file_name或使用引號圍繞斜線,即:

copy($file_name, $dest_dir."\".$file_name) 
+0

我已經更新了我的代碼,並嘗試執行相同的操作,但仍然出現同樣的錯誤。 – Praveenks 2014-10-22 12:30:30

+2

@Praveenks您的更新代碼仍然具有複製()而不是複製()(全部小寫)作爲@i沮喪的外星人寫道。 'File :: Copy'(混合大小寫)是提供函數'copy'(小寫)的模塊的名稱。 – Smylers 2014-10-22 12:53:34

+0

您可能會發現'File :: Copy :: copy'有效。 – Sobrique 2014-10-22 13:53:58

相關問題