在perl中将字符串替换为开始而不是在末尾附加

时间:2019-01-03 08:51:09

标签: perl

我打算将文件名添加到文件夹路径字符串的末尾。例如,在checkfile.tgz的末尾添加/u/username/folder1/folder2/folder3/folder4。但是,当我运行以下代码时

my $folderpath = "/u/username/folder1/folder2/folder3/folder4";
my $filepath = $folderpath . "/checkfile.tgz";

没有给我

/u/username/folder1/folder2/folder3/folder4/checkfile.tgz

它显示

/checkfile.tgzlder1/folder2/folder3/folder4

字符串长度不变,而前几个字符被替换为需要附加的字符串。那我该如何解决这个问题呢?

1 个答案:

答案 0 :(得分:3)

运行您的代码可以给我准确的预期输出。

这是我运行的程序:

#!/usr/bin/perl

use strict;
use warnings;
use feature 'say';

my $folderpath = "/u/username/folder1/folder2/folder3/folder4";
my $filepath = $folderpath . "/checkfile.tgz";

say "Folder path is: $folderpath";
say "File path is: $filepath";

这是我得到的输出:

Folder path is: /u/username/folder1/folder2/folder3/folder4
File path is: /u/username/folder1/folder2/folder3/folder4/checkfile.tgz

如果这不是您所看到的,请更新您的问题,以提供一个小巧而完整的程序,我们可以运行该程序来演示您的问题。您还应该准确说明您希望看到的内容。

ikegami在评论中说,换行符和回车符几乎是一个问题-可能是由于在Windows和Linux之间传输文件而未进行适当的行尾转换而使问题更加复杂。

更新:为了支持ikemami的理论,这是我的测试程序的经过轻松编辑的版本(我在$folderpath的末尾添加了回车符)。

#!/usr/bin/perl

use strict;
use warnings;
use feature 'say';

my $folderpath = "/u/username/folder1/folder2/folder3/folder4\r";
my $filepath = $folderpath . "/checkfile.tgz";

say "Folder path is: $folderpath";
say "File path is: $filepath"; 

这是该程序产生的输出:

Folder path is: /u/username/folder1/folder2/folder3/folder4
/checkfile.tgz/u/username/folder1/folder2/folder3/folder4