如何在Perl中创建和附加具有可变路径的文件?

agg*_*tan 0 perl file path

我正在努力创建一个脚本,为我创建图像库.

当我运行我所拥有的它告诉我

No such file or directory at photographycreate line 16.
------------
(program exited with code: 2)
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止所获得的代码.

#!/etc/perl -w

#CHANGE THIS
$filecategory = "cooking";

$filenumber = 0;
#$filename = "photography";
$imagedirectory = "\"/media/New Volume/Programming/kai product/media/photography/".$filecategory."/images/\"";
$galleryfile = "\"/media/New Volume/Programming/kai product/pages/".$filenumber."_".$filecategory."_gallery.html\"";

@imagelocation = <$imagedirectory/*>; #*/
$filecount = @imagelocation;

while($filenumber < 3) {        
    open GALLERY, "+>", $galleryfile or die $!;
    print GALLERY ($filecount."\n");
    print GALLERY ($imagedirectory."\n");
    print GALLERY ($galleryfile."\n");
    close GALLERY;

    ++$filenumber;
}
Run Code Online (Sandbox Code Playgroud)

我想要它做的是创建文件,打开它,写东西,然后关闭/保存它.我怎么能用我所拥有的呢?

这是修复:

#!/etc/perl -w
use Fcntl; #The Module
use strict;

#CHANGE THIS
my $filecategory = "cooking";

my $filenumber = 0;
my $imagedirectory = "\"/media/New Volume/Programming/kaiproduct/media/photography/".$filecategory."/images/\"";
my $galleryfile = "/media/New Volume/Programming/kaiproduct/pages/".$filenumber."_".$filecategory."_gallery.html";

my @imagelocation = <$imagedirectory/*>; #*/
my $filecount = @imagelocation;

while($filenumber < 3)
    {
        open GALLERY, "+>", $galleryfile or die $!;
        print (GALLERY $filecount."\n");
        print (GALLERY $imagedirectory."\n");
        print (GALLERY $galleryfile."\n");
        close GALLERY;

        ++$filenumber;
    }
Run Code Online (Sandbox Code Playgroud)

Chr*_*utz 7

我认为问题在于:

$imagedirectory = "\"/media/New Volume/Programming/kai product/media/photography/".$filecategory."/images/\"";
$galleryfile    = "\"/media/New Volume/Programming/kai product/pages/".$filenumber."_".$filecategory."_gallery.html\"";
Run Code Online (Sandbox Code Playgroud)

具体来说,这些字符串中的每一个都以字母开头"\"和结尾\"",这意味着您的文件和文件夹将被双引号括起来.所以Perl并没有尝试打开/media/New Volume/etc...,但是"/media/New Volume/etc...",由于没有调用目录,因此不存在".你过度引用了.

你可以(而且应该总是)做的一件事就是让你的代码变得更好use strict;.我看你已经use warnings;在顶部有,这是很好的,但同时使用strict,并warnings会使你的代码更加安全,更好看.