连接会覆盖字符串并混淆

时间:2016-07-18 08:44:24

标签: perl concatenation

我最近编写了一个转换器,它将旧的Wiki页面转换为SharePoint页面。

这一切都是通过命令行完成的,但现在我用Win32切换到了GUI。

我仍然是Perl的新手,只是将我的工作代码复制到我的new.pl并使用花哨的GUI。

一切正常,这一行:

$newFileName = 'Pages/'.$file.'.aspx';

它应该输出我的目录(Pages/TheFileName.aspx)的路径,我存储转换后的页面。

但是,当我打印$newFileName时,我得到了这个:

.aspx/TheFileName

.aspx会覆盖页面而不是在最后连接。

我已经尝试了数百个其他组合但第二个连接只是覆盖了我的文本。这是完全相同的一行,它在我的另一个脚本中工作。

1 个答案:

答案 0 :(得分:1)

$ newFileName的确切内容似乎是

"Pages/TheFileName\r.aspx"

,打印时看起来像

.aspx/TheFileName

因为包含“\ r”(回车)会导致光标转到行的开头,以便“.aspx”覆盖屏幕上的“页面”。

如此简单的修复(如评论中已提到的)是从$ file中删除“\ r \ n”,例如与

$file =~ s/\r//g;

这样的问题在Windows中很常见,因为在Windows中,换行符是“\ r \ n”而许多类似unix的程序除了“\ n”之外,因此很容易在字符串中留下额外的“\ r \ n”。