我们有一个文件需要将 ASCII 字符转换为另一个 ASCII 字符以进行格式化。我们始终使用 perl -pe 或 sed 在 Perl 脚本内的系统命令中从外部调用来执行此操作。
但是,自从我们从 AIX 迁移到 Red Hat 以来,我们注意到 perl -pe 在 perl 脚本中无法按预期工作,而在命令行中则可以。
system("cat $AlifeFile | perl -p -e 's/\|.*MSH/\nMSH\|/g'| tr -d '\v'>> <outbound file name>");
产品
MSH|
MSH|
MSH||
MSH|^
MSH|~
MSH|\
MSH|&
MSH||
MSH|A
MSH|-
MSH|L
MSH|i
MSH|f
MSH|e
MSH||
MSH||
MSH|I
MSH|D
MSH|X
MSH|_
MSH|T
MSH|E
MSH|S
MSH|_
MSH|C
MSH|H
MSH|G
MSH||
MSH||
MSH|2
MSH|0
MSH|2
MSH|4
MSH|0
MSH|5
MSH|0
MSH|9
MSH|1
MSH|3
如果应该
MSH...
MSH...
当我尝试更换时 034 与一个 HL7 消息中 MSH 段之前。
当我尝试相同的系统命令,但从 perl 脚本之外的命令行时,它会正确翻译它。
那么,为什么如果我从系统命令内的 perl 脚本调用它,它会产生与我从 Red Hat 命令行调用相同代码时不同的结果?
Perl 字符串文字
"… perl -p -e 's/\|.*MSH/\nMSH\|/g' …"
产生字符串
… perl -p -e 's/|.*MSH/␊MSH|/g' …
同样,
"… tr -d '\v' …"
产生字符串
"… tr -d 'v' …"
这些不是您要执行的程序。
请注意,后者会产生警告。始终使用
use strict; use warnings;
或同等内容。