0

我有一个在 Server 2008 上编写的 Perl 脚本。它在这里工作正常。

我已将其复制到运行 Windows 10 家庭版、版本 1993、操作系统构建 18362.959 的笔记本电脑上。

我也是第一次下载 Active Perl。

该脚本基本上采用输入文件并将正则表达式应用于内容,然后将结果输出到文件。

在 Windows 10 上,它没有写入文件,甚至没有创建文件。

我已经对这个问题进行了搜索,但没有找到解决方案。

我尝试了以下代码,在对同一问题的回复中找到了一个。但它不会创建或写入文件。它在服务器 2008 上运行良好。我错过了什么吗?如前所述,这是我第一次下载 ActivePerl 版本


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);
4

1 回答 1

2

始终使用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;
于 2020-08-02T05:13:53.713 回答