当我尝试使用文件句柄作为参数的“chdir”时,“chdir”返回0并且pwd
仍然返回相同的目录。应该这样吗?
我试过这个,因为在chdir的文档中我找到了:
“在支持fchdir的系统上,你 可能会传递文件句柄或目录 处理作为参数。在系统上 不支持fchdir,传递句柄 在运行时产生致命错误。“
稍后给出:
#!/usr/bin/perl -w
use 5.010;
use strict;
use Cwd;
say cwd(); # /home/mm
open( my $fh, '>', '/home/mm/Documents/foto.jpg' ) or die $!;
say chdir $fh; # 0
say cwd(); # /home/mm
我认为这可能是文件目录的chdir - 但这里没有DWIM。
答案 0 :(得分:8)
它也说
It returns true upon success, false otherwise.
表示您对chdir
的调用失败。检查$!
变量以获取有关发生的事情的线索。由于您没有收到致命的运行时错误,因此您不必担心关于fchdir
的最后一段。
<小时/>
运行几个测试,我看到chdir FILEHANDLE
在FILEHANDLE
引用目录时有效,但在常规文件中没有。希望有所帮助:
open(FH, "<", "/tmp/file"); # assume this file exists
chdir FH and print "Success 1\n" or warn "Fail 1: $!\n";
open(FH, "<", "/tmp");
chdir FH and print "Success 2\n" or warn "Fail 2: $!\n";
opendir(FH, "/tmp");
chdir FH and print "Success 3\n" or warn "Fail 3: $!\n";
Fail 1: Not a directory
Success 2
Success 3
答案 1 :(得分:0)
perl
的哪个版本?哪个操作系统?
5.10.1:
#!/usr/bin/perl
use strict; use warnings;
# have to use a file because Windows does not let
# open directories as files
# only done so I can illustrate the fatal error on
# a platform where fchdir is not implemented
open my $fh, '<', 'e:/home/test.txt'
or die "Cannot open file: $!";
chdir $fh
or die "Cannot chdir using filehandle: $!";
输出:
C:\Temp> k The fchdir function is unimplemented at C:\Temp\k.pl line 9.Linux上的
5.10.1(/home/sinan/test
是一个目录):
$ cat k.pl
#!/usr/bin/perl
use strict; use warnings;
use Cwd;
open my $fh, '<', '/home/sinan/test'
or die "Cannot open file: $!";
chdir $fh
or die "Cannot chdir using filehandle: $!";
print getcwd, "\n";
$ ./k.pl
/home/sinan/test
答案 2 :(得分:0)
适合我。 Windows不支持fchdir,实际上它是一个致命的错误:
perl -we"opendir my $fh, 'temp'; chdir $fh or print 'foo'"
产生致命错误。所以看起来在完全没有fchdir支持的系统上它适用于规范。看起来可以清除措辞,特别是“可能”这个词。