Решение 1
Порядок импорта имеет значение import lazy loaded module
вверху и router module
на последнем месте. Поскольку мы выполняем отложенную загрузку, этот загруженный модуль должен существовать до того, как мы осуществим маршрутизацию.
imports: [
BrowserModule,
HeroModule, // Lazy-loaded module
AppRoutingModule
],
Решение 2
Обычно Angular CLI
импортирует module
в app-module
при его создании. поэтому убедитесь, что модуль lazy-loaded
не был импортирован в app-module
Вы хотите выполнить какое-то действие с MYFILE
после того, как вы (или сам интерпретатор из-за ошибки) закрыли его.
Согласно вашему образцу кода, проблема может случиться так, что open
на самом деле не открывает файл, у сценария может нет разрешения на запись в файл.
Измените свой код на следующий, чтобы проверить, была ли ошибка:
open(MYFILE, ">", "/home/abc/xrt/sdf/news/top.html") or die "Couldn't open: $!";
Обновление
ysth указывает, что -w
не очень хорошо проверяет, можете ли вы писать в файл, он только «проверяет, установлен ли один из соответствующих флагов в режиме». Более того, brian d foy сказал мне, что использованное мной условие не подходит для обработки ошибки. Поэтому я удалил вводящий в заблуждение код. Вместо этого используйте приведенный выше код.
Альтернативным решением сказать или умереть
является использование прагмы autodie :
#!/usr/bin/perl
use strict;
use warnings;
use autodie;
open my $fh, "<", "nsdfkjwefnbwef";
print "should never get here (unless you named files weirdly)\n";
Приведенный выше код вызывает следующую ошибку (если файл named nsdfkjwefnbwef существует в текущем каталоге):
Can't open 'nsdfkjwefnbwef' for reading: 'No such file or directory' at example.pl line 7
Похоже, что вызов open
завершился ошибкой. Вы должны всегда проверять статус при открытии дескриптора файла.
my $file = '/home/abc/xrt/sdf/news/top.html';
open(MYFILE, ">$file") or die "Can't write to file '$file' [$!]\n";
print MYFILE $DATA;
close MYFILE;
Если открытие завершилось неудачно, встроенная переменная $! (также известный как $ OS_ERROR) будет содержать зависящее от ОС сообщение об ошибке, например, «Permission denied»
Также предпочтительно (для неархаичных версий Perl) использовать форму с тремя аргументами open
и лексические дескрипторы файлов:
my $file = '/home/abc/xrt/sdf/news/top.html';
open(my $fh, '>', $file) or die "Can't write to file '$file' [$!]\n";
print {$fh} $DATA;
close $fh;
Убедитесь, что открытая сработала
if(open(my $FH, ">", "filename") || die("error: $!"))
{
print $FH "stuff";
close($FH);
}
Где-то в вашем скрипте вы будете делать что-то вроде:
open MYFILE, "> myfile.txt";
# do stuff with myfile
close MYFILE;
print MYFILE "Some more stuff I want to write to myfile";
Последняя строка выдаст ошибку, потому что MYFILE был закрыт.
Обновление
После просмотра вашего кода , похоже, что файл, в который вы пытаетесь записать, вообще не открывается. Как уже упоминалось другими, попробуйте сделать что-нибудь вроде:
open MYFILE, "> myfile.txt" or die "Can't open myfile.txt: $!\n"
Это должно дать вам обратную связь о том, почему вы не можете открыть файл.
Это:
open(MYFILE,">/home/abc/xrt/sdf/news/top.html");
В современном Perl это можно было бы записать как:
open(my $file_fh, ">", "/home/abc/xrt/sdf/news/top.html") or die($!);
Таким образом вы получаете переменную $, ограниченную областью видимости, нет никакого "забавного дела", если у вас странные имена файлов (например, начинающиеся с ">") и обработка ошибок (вы можете заменить die на warn или на код обработки ошибок).
Как только вы закроете $ file_fh или просто выйдете из области видимости, вы больше не сможете печатать в него.
Если вы используете глобальный символ MYFILE в качестве дескриптора файла, а не локальный лексический файл ($ myfile), вы всегда будете сталкиваться с проблемами, если ваша программа многопоточная, например, если она выполняется через mod_perl. Один процесс может закрывать дескриптор файла, в то время как другой процесс пытается записать в него. Использование $ myfile позволит избежать этой проблемы, поскольку каждый экземпляр будет иметь свою собственную локальную копию, но вы все равно столкнетесь с проблемами, когда один процесс может перезаписать данные, которые записывает другой. Используйте flock (), чтобы заблокировать файл во время записи в него.