-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)

更新:次の1行を試してください:

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