-1

我正在尝试将文本文件中的文件路径发送到变量中。然后我想使用该文件路径并打开它并列出其中的目录。

open (FILE, 'drive_path.txt') or die $!;
my $dir= (<FILE>);
close (FILE);
chomp $dir;
print $dir;
opendir (DIR, '$dir') or die $!;

打印输出给了我正确的路径位置:

C:\Documents and Settings\KSoli7151794\Desktop\TEST

但由于某种原因,它说“没有这样的文件或目录”有帮助吗?

编辑:这是我桌面上的文件列表:驱动器 C 中的卷是操作系统驱动器卷序列号是 18C9-6274

C:\Documents and Settings\KSoli7151794\Desktop 目录

10/04/2013  11:35 AM    <DIR>          .
10/04/2013  11:35 AM    <DIR>          ..
11/18/2010  11:27 AM           587,776 7za.exe
10/04/2013  11:31 AM                51 drive_path.txt
10/03/2013  05:39 PM             1,494 ExtractAndCreate.bat
09/27/2013  04:34 PM               604 ExtractAndDelete.bat
10/04/2013  11:30 AM             1,854 ParseAndRename.pl
08/07/2013  11:38 AM    <DIR>          Resources
10/04/2013  11:06 AM    <DIR>          TEST
10/04/2013  11:35 AM                 0 test.txt
               8 File(s)        995,380 bytes
               4 Dir(s)  285,785,993,216 bytes free

带有错误消息的新代码:

open (FILE, 'drive_path.txt') or die $!;
my $dir= (<FILE>);
close (FILE);
chomp $dir;
print $dir;
opendir (DIR, $dir) or die $!;

C:\Documents and Settings\KSoli7151794\Desktop\TEST
Invalid argument at ParseandRename.pl line 18

前 18 行

#!/usr/local/bin/perl

use strict;
use warnings;

open (FILE, 'drive_path.txt') or die $!;
local $/;
my $blocksize;
my $directory;
my $testcase;
my $count = -1;
my @foldernames;
my @testsuite;
my $dir = (<FILE>);
close (FILE);
chomp $dir;
print $dir;
opendir (DIR, $dir) or die $!;

解决方案:我拿出来local$/;,它似乎按预期工作。

4

1 回答 1

3

单引号防止变量插值。您的代码尝试打开一个名为$dir(美元符号后跟字母 d 等)的目录。您的代码中不需要它们:

opendir (DIR, $dir) or die $!;

这种类型的错误可以通过以下方式检测perlcritic

字符串*可能*需要在第...行第 15 列进行插值。参见 PBP 第 51 页。(严重性:1)

更新:试试这一行:

opendir (DIR, 'C:\Documents and Settings\KSoli7151794\Desktop\TEST') or die $!;
于 2013-10-04T16:37:56.367 回答