Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
perl:File::Copy:读取现有文件时没有此类文件或目录错误_Perl - Fatal编程技术网

perl:File::Copy:读取现有文件时没有此类文件或目录错误

perl:File::Copy:读取现有文件时没有此类文件或目录错误,perl,Perl,我正在尝试下载几个示例rails项目中列出的ruby gems,这些示例rails项目是我通过RVM安装的最新版本的ruby通过bundle install下载的,我按照说明正确下载bundler文件中列出的gems。我想我应该用这个perl脚本来加速这个过程:(对bash还不太熟悉): 文件显然存在,这些项目大概是用rails命令创建的。为什么会发生这种情况?我如何修复它?当您使用system或backticks调用外部命令时,会生成一个新进程。该进程获取其自己的环境,该环境不与父进程或其他子

我正在尝试下载几个示例rails项目中列出的ruby gems,这些示例rails项目是我通过RVM安装的最新版本的ruby通过
bundle install下载的,我按照说明正确下载bundler文件中列出的gems。我想我应该用这个perl脚本来加速这个过程:(对bash还不太熟悉):


文件显然存在,这些项目大概是用
rails
命令创建的。为什么会发生这种情况?我如何修复它?

当您使用
system
或backticks调用外部命令时,会生成一个新进程。该进程获取其自己的环境,该环境不与父进程或其他子进程共享:

system('pwd'); # /foo
system('cd "/bar"');
system('pwd'); # still /foo
(请注意,如果您没有实际存储命令的输出,最好使用
system
而不是backticks。)

这意味着当您
`cd“$dir”`
时,您的Perl脚本的工作目录没有改变。要修复此问题,请使用本机Perl命令,而不是调用shell命令

下面是一个粗略的示例(未经测试):


使用
system
或backticks调用外部命令时,会生成一个新进程。该进程获取其自己的环境,该环境不与父进程或其他子进程共享:

system('pwd'); # /foo
system('cd "/bar"');
system('pwd'); # still /foo
(请注意,如果您没有实际存储命令的输出,最好使用
system
而不是backticks。)

这意味着当您
`cd“$dir”`
时,您的Perl脚本的工作目录没有改变。要修复此问题,请使用本机Perl命令,而不是调用shell命令

下面是一个粗略的示例(未经测试):

system('pwd'); # /foo
system('cd "/bar"');
system('pwd'); # still /foo
use strict;
use warnings;

use File::Copy;

my $parent_dir = 'foo';

opendir my $dh, $parent_dir or die "opendir failed on '$parent_dir': $!";

my @subdirs = map { "$parent_dir/$_" }
              grep { $_ !~ /^\.\.?$/ && -d "$parent_dir/$_" } readdir $dh;

foreach my $subdir (@subdirs) {
    my $source = "$subdir/Gemfile";
    my $target = "$subdir/tmp.save";

    if (-f $source) {
        copy $source, $target or die "copy failed: $!";
    }
}