Perl не записывается в файл в Windows 10 - PullRequest
0 голосов
/ 02 августа 2020

У меня есть сценарий Perl, написанный на Server 2008. Здесь он отлично работает.

Я скопировал его на свой ноутбук, на котором работает Windows 10 Home Edition, версия 1993, сборка ОС 18362.959 .

Я также впервые загружаю Active Perl.

Скрипт в основном принимает входной файл и применяет регулярные выражения к содержимому, а затем выводит результаты в файл.

На Windows 10 не выполняется запись в файл, файл даже не создается.

Я провел поиск по этой проблеме, но не нашел решения.

Я попробовал следующий код, найденный в ответе на ту же проблему. Но он не создает и не записывает в файл. Он отлично работает на сервере 2008. Я что-то упускаю? Как уже упоминалось, я впервые скачал Active Perl версию

Perl Подробная информация о версии:

This is perl 5, version 28, subversion 1 (v5.28.1) built for MSWin32-x64-multi-thread
(with 1 registered patch, see perl -V for more detail)

Copyright 1987-2018, Larry Wall

Binary build 0000 [58a1981e] provided by ActiveState http://www.ActiveState.com
Built Apr 10 2020 17:28:14

Perl код выглядит следующим образом:

use strict;

use IO::File;   
my $FileHandle = new IO::File;

$FileName = "C:\\Users\\moons\\Documents\\Personal Planning\\Shopping\\ShoppingList.txt";

open ($FileHandle, "<$FileName") || print "Cannot open $FileName\n";

local $/;
 
my $FileContents  = <$FileHandle>;
close($FileHandle);

$FileContents =~ s/(Add|Bad|Limit|Each).*\n|Add$|\nWeight\n\d{1,}\nea|\$\d{1,}\.\d\d\/100g\n//g;
 Do more Regular expressions.
$FileContents =~ s/(.*)\n(.*)\n(\$\d{1,}\.\d\d)/$1,$3,$2/g;

printf $FileContents;

Приведенный выше код работает. Код ниже не создает и не записывает в файл. $ OutFile = "C: \ Users \ moons \ Documents \ Personal Planning \ Shopping \ test.txt";

$FileHandle = new IO::File;

open ($FileHandle, ">$OutFile") || print "Cannot open $OutFile\n";

printf $FileHandle $FileContents;
close($FileHandle);

1 Ответ

2 голосов
/ 02 августа 2020

Всегда используйте use strict; use warnings;.

my $OutFile = "C:\Users\moons\Documents\Personal Planning\Shopping\test.txt";

приводит к

Unrecognized escape \m passed through at a.pl line 3.
Unrecognized escape \D passed through at a.pl line 3.
Unrecognized escape \P passed through at a.pl line 3.
Unrecognized escape \S passed through at a.pl line 3.

Вы можете использовать

my $OutFile = "C:\\Users\\moons\\Documents\\Personal Planning\\Shopping\\test.txt";

Всего:

use strict;
use warnings;

my $in_qfn  = "C:\\Users\\moons\\Documents\\Personal Planning\\Shoppin\\ShoppingList.txt";
my $out_qfn = "C:\\Users\\moons\\Documents\\Personal Planning\\Shopping\\test.txt";

open(my $in_fh, '<', $in_qfn)
   or die("Can't open \"$in_qfn\": $!\n");
open(my $out_fh, '>', $out_qfn)
   or die("Can't create \"$out_qfn\": $!\n");

my $file;
{
   local $/;
   $file = <$in_fh>;
}

for ($file) {
   s/(Add|Bad|Limit|Each).*\n|Add$|\nWeight\n\d{1,}\nea|\$\d{1,}\.\d\d\/100g\n//g;
   s/(.*)\n(.*)\n(\$\d{1,}\.\d\d)/$1,$3,$2/g;
}

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