1

我有一个包含在我需要写入文件的变量中的信息。我的脚本需要创建文件然后写入它。

这是我当前的脚本:

my $file_location = '/network/$custom_directory/$custom_filename';
open(my $file ">", $file_location) or die $!;
print $file "$variable_data";
close $file;

我感觉我的脚本被挂在了实际的文件创建上,而不是变量写入过程上。运行脚本时出现的错误是:在我尝试打开文件的行处“没有这样的文件或目录”。

4

4 回答 4

9

您的程序中有语法错误。的所有三个参数open必须用逗号分隔。

open my $file, '>', $file_location or die $!;

与双引号不同,单引号不会插入,因此您可能需要在文件路径中使用它们:

my $file_location = "/network/$custom_directory/$custom_filename";

顺便说一句:将唯一变量包含在双引号服务器中对字符串内容没有用处。你可以等效地

print $file $variable_data;
于 2013-08-05T12:59:19.437 回答
4

你没有说你的错误是什么。

  • 但是你少了一个逗号。
  • 你也有错误的报价。
  • 你也(可能)忘记了最后的换行符。
  • 而且您忘记检查关闭是否成功,以免您的文件系统应该已填满。
  • 您可能忘记了 binmode 或编码。

这给了你这样的东西,带有强制性的序言:

#!/usr/bin/perl

use strict;
use warnings;

my $custom_directory = "something old";
my $custom_filename  = "something new";
my $data             = "something borrowed";

my $path = "/network/$custom_directory/$custom_filename";

open(my $handle, ">", $path)    || die "can't open $path: $!";
binmode($handle);               # for raw; else set the encoding

print $handle "$data\n";

close($handle)                  || die "can't close $path: $!";
于 2013-08-05T13:01:31.350 回答
3

两件事:首先文件位置是单引号,所以$变量不会被插值。其次,您在对 . 的调用中缺少逗号open。代码应为:

my $file_location = "/network/$custom_directory/$custom_filename";
open(my $file, ">", $file_location) or die $!;
于 2013-08-05T13:00:11.483 回答
3

第一的,

use strict;
use warnings;

可能会有所帮助。其次,变量插值需要双引号字符串:

my $file_location = "/network/$custom_directory/$custom_filename";

第三,您可能需要在 print 语句中添加一个 \n :

print $file "$variable_data\n";

最后,您的公开声明应该是:

open my $file, ">", $file_location or die $!;
于 2013-08-05T13:00:24.557 回答