filehandle - не будет писать в файл - PullRequest
0 голосов
/ 22 марта 2011

Я не могу получить приведенный ниже скрипт для записи в файл data.txt, используя FILEHANDLE. Оба файла находятся в одной папке, так что это не проблема. С тех пор как я начал работать с Perl, я заметил, что для запуска скриптов мне нужно использовать полный путь: c: \ Programs \ scriptname.pl, а также тот же метод для ввода файлов. Я думал, что это может быть проблемой, и попробовал этот синтаксис ниже, но это тоже не сработало ...

open(WRITE, ">c:\programs\data.txt") || die "Unable to open file data.txt: $!";

Вот мой сценарий. Я проверял синтаксис, пока он не сводит меня с ума и не видит проблемы. Любая помощь будет принята с благодарностью! Я также озадачен, почему функция die не сработала.

#!c:\strawberry\perl\bin\perl.exe

#strict
#diagnostics
#warnings

#obtain info in variables to be written to data.txt
print("What is your name?");
$name = <STDIN>;
print("How old are you?");
$age = <STDIN>;
print("What is your email address?");
$email = <STDIN>;

#data.txt is in the same file as this file.
open(WRITE, ">data.txt") || die "Unable to open file data.txt: $!";

#print information to data.txt
print WRITE "Hi, $name, you are \s $age and your email is \s $email";

#close the connection
close(WRITE);

Как я решил эту проблему, решил .

У меня установлен Strawberry Perl perl.exe, установленный на диске c :, установленный через и использующий установщик с папкой также на c с моими сценариями, что означало, что я не могу выполнить красный / запись в файл (направленный или использующий функции, т. е. открытая), и мне всегда приходилось использовать полные пути для запуска скрипта. Я решил эту проблему после того, как предложил оставить интерпретатор установленным там, где он был, и переместить мой файл сценариев на рабочий стол (оставьте команду ОС в первой строке сценария, где он находится, поскольку интерпретатор все еще находится на том же месте, где он был изначально ). Теперь я могу запускать сценарии одним щелчком, читать / писать и добавлять в файл с приглашением CMD и с легкостью использовать функции Perl.

Ответы [ 4 ]

2 голосов
/ 23 марта 2011

Обратные косые черты имеют особое значение в двойных кавычках.Попробуйте избежать обратной косой черты.

open(WRITE, ">c:\\programs\\data.txt") || die ...;

Или, поскольку вы не интерполируете переменные, переключитесь на одинарные кавычки.

open(WRITE, '>c:\programs\data.txt') || die ...;

Также стоит использовать версию с тремя аргументами open илексические файловые ручки.

open(my $write_fh, '>', 'c:\programs\data.txt') || die ...;
1 голос
/ 22 марта 2011

Вы можете попробовать FindBin .

use strict;
use warnings;
use autodie; # open will now die on failure

use FindBin;
use File::Spec::Functions 'catfile';
my $filename = catfile $FindBin::Bin, 'data.txt';

#obtain info in variables to be written to data.txt
print("What is your name?"); my $name = <STDIN>;
print("How old are you?"); my $age = <STDIN>;
print("What is your email address?"); my $email = <STDIN>;

{
  open( my $fh, '>', $filename );
  print {$fh} "Hi, $name, you are $age, and your email is $email\n";
  close $fh;
}
1 голос
/ 22 марта 2011

Если у вас возникла проблема с доступом при попытке печати в data.txt, вы можете изменить эту строку на:

print WRITE "Hi, $name, you are \s $age and your email is \s $email" || die $!;

, чтобы получить больше информации.Файл только для чтения вызовет это сообщение об ошибке:

Unable to open file data.txt: Permission denied at perl.pl line 12, <STDIN> line 3.
1 голос
/ 22 марта 2011

вы должны использовать "/" для обеспечения переносимости, поэтому: open(WRITE, ">c:/programs/data.txt") Примечание: я предполагаю, что папка c:/programs существует

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...