Forum Webscript.Ru

Программирование => Perl => Тема начата: Forza от 29 Ноября 2004, 17:14:14

Название: filehandle и use strict
Отправлено: Forza от 29 Ноября 2004, 17:14:14
Ничего не понимаю(с)....

Хочу открыть файл при наличии директивы use strict. При открытии типа open (FH, $fileName) вполне логично пишет "Bareword "FH" not allowed while "strict subs" in use". Как заранее объявить дескриптор такого формата, я пока в перлдоке не нашёл.
Кроме того perlopentut предлагает альтернативный вариант открытия файла: open( my $fh, $fileName ). На это версия Перла у провайдера пишет "Can\'t use an undefined value as a symbol reference", т.е. почему-то требует переменную со значением.
Конечно, я могу взять всю работу с файлом в скобки и сказать там no strict, но это будет отступление... :)
Название: filehandle и use strict
Отправлено: Green Kakadu от 29 Ноября 2004, 17:41:41
Цитировать
Forza:
Хочу открыть файл при наличии директивы use strict. При открытии типа open (FH, $fileName) вполне логично пишет "Bareword "FH" not allowed while "strict subs" in use".

чего то ты там сам намутил ибо ничего логичного я не вижу (может чего не понимаю)


#!/usr/bin/perl -w
use strict;
my $fileName=\'/text2-test.txt\';
open (FH, ">",$fileName)||die("Не могу открыть файл, $!");
print FH \'Hello,world!\';
close FH;

никаких ругательств, скорее у тебя где-то др. ошибочка закралась
Название: filehandle и use strict
Отправлено: Forza от 29 Ноября 2004, 17:49:36
Мда, твой вариант обращения с дескриптором работает. Бум искать ошибку.

Кстати, провайдерский перл ругается на open (FH, ">",$fileName) словами Too many arguments for open at filetest.pl line 5, near "$fileName)". Пришлось исправить на open (FH, ">$fileName").

А логичность я видел в том, что на мой взгляд use strict требует всё заранее объявлять, нет? :)
Название: filehandle и use strict
Отправлено: Green Kakadu от 29 Ноября 2004, 17:54:30
Цитировать
Forza:
провайдерский перл

:) похоже у них далеко не свежая версия перла
Название: filehandle и use strict
Отправлено: Skif от 29 Ноября 2004, 18:05:38
Ага, ниже 5.6.
По топику:
Например имеется массив с именами файлов(неважно как получили):

foreach $file (@my_file_arr) {
  my $filename = $file;
open($filename, $filename);
close($filename)
}
ЗЫ: можно, конечно дескриптор забить статически FH или менять а-ля $FH="FH_$filename", но это на любителя. Я пользуюсь в основном первым вариантом.
Название: filehandle и use strict
Отправлено: Green Kakadu от 29 Ноября 2004, 18:08:18
Цитировать
Forza:
на мой взгляд use strict требует всё заранее объявлять, нет?

насколько я понимаю,
use strict; аналогично одновременному вызову:

use strict "vars";
ругается если переменная не объявлена

use strict "refs";
ругается при использовании символических ссылок

use strict "subs";
ругается при неосторожном обращении с именами подпрограмм
Название: filehandle и use strict
Отправлено: vladsu от 30 Ноября 2004, 00:48:51
Попробуйте переписать строку так
open (FH, "> $fileName")