在Perl中将字符串变量转换为固定字符串

f87krz0w  于 2023-10-24  发布在  Perl
关注(0)|答案(2)|浏览(175)

我有一个在提示符下输入的变量:

my $name = <>;

我想给它附加一个固定的字符串'_one'(在一个单独的变量中)。
例如,如果$name = Smith,则变为'Smith_one'
我尝试了几种不同的方法,但都没有给我给予正确的结果,例如:

my $one = "${name}_one";

^_one出现在下一行,当我打印出来,当我使用它,_一是不包括在所有。
还有:

my $one = $name."_one";

^'_one'出现在字符串的 * 开头 *。
以及:

my $end = '_one';
my $one = $name.$end;
or 
my $one = "$name$end";

这些都没有产生我想要的结果,所以我一定是错过了一些相关的输入是如何从提示符格式化,也许。

8ehkhllq

8ehkhllq1#

您的问题与字符串追加无关:当您读取一行(例如通过<>)时,记录输入分隔符 * 包括 * 在该字符串中;这通常是一个换行符\n。要删除换行符,chomp变量:

my $name = <STDIN>; # better use explicit filehandle unless you know what you are doing
    # now $name eq "Smith\n"
    chomp $name;
    # now $name eq "Smith"

要将一个变量插入到一个字符串中,你通常不需要使用${name}语法。这些行都会将_one追加到你的字符串中,并创建一个新的字符串:

"${name}_one"  # what you used
    "$name\_one"   # _ must be escaped, else the variable $name_one would be interpolated
    $name . "_one"
    sprintf "%s_one", $name
    # etc.

这将把_one附加到你的字符串中,并仍然将其存储在$name中:

$name .= "_one"
plupiseo

plupiseo2#

谢谢-这真的很有帮助。如果它可以帮助其他任何人试图修复/设置从Google Photos或通过WhatsApp下载的文件的修改日期(剥离所有exif数据),我使用了以下方法:
这将与格式为'IMG-20170721-WA0009.jpg'的WhatsApp类型的东西一起工作,并将小时,分钟和秒设置为01 01 01

find . -name \* | perl -lne 'my $a=$_; s/[^\d]+(\d{4})(\d{2})(\d{2})-.*/$1$2$3/ && print "touch -t ${_}0101.01\ \"${a}\"" '

这修复了像'20170721_063856.jpg'这样的图像

find . -name \* | perl -lne 'my $a=$_; s/.*(\d{4})(\d{2})(\d{2})_(\d{2})(\d{2})(\d{2}).*/$1$2$3$4$5.$6/ && print "touch -t $_\ \"$a\"" '
  • 然后再添加| bash -x以使其实际执行。这些搜索整个目录,以防您也在寻找视频/非jpg

相关问题