【问题标题】:How do I set two different strings equal to each other inside a variable in perl? [closed]如何在perl的变量中设置两个不同的字符串彼此相等? [关闭]
【发布时间】:2022-01-21 19:31:29
【问题描述】:

我有一些目录路径。

dir1/abc/dir2/dir3

dir1/xyz/dir2/dir3

我有一个操作这些目录的 Perl 脚本,但该脚本遇到了路径名错误。

如何在 perl 变量中设置 "abc" = "xyz",以便可以在上面的路径名中使用该变量?

例如应该是

dir1/$PathVariable/dir2/dir3 

这样脚本就不会关心路径的一部分是“abc”还是“xyz”。

到目前为止,我尝试使用 eq 关键字

my $Path1 = "abc";
my $Path2 = "xyz";
my %PathVariable = $Path1 eq $Path2;

原来eq 并没有像我想的那样做。有什么建议吗?

【问题讨论】:

  • "以便脚本不关心路径的一部分是“abc”还是“xyz”。 - 即使,这对你没有多大帮助,因为操作系统会关心。要么使用正确的路径,要么使用类似 (sym) 链接在文件系统中 使多个路径指向同一个文件系统对象。
  • 您的问题不够清晰。你说你想“set strings”并且你想“set "abc" = "xyz"" 没有更多细节,但你没有使用“set”的英文定义或以已知方式使用该词。如果您要编造自己的行话,则必须解释您的意思!
  • 这显然是一个XY-problem。你应该说出你为什么要做这件事,然后你会得到更好的答案。

标签: string perl variables


【解决方案1】:

我想这是你的问题。您有一个路径模板,例如dir1/$PathVariable/dir2/dir3,并且您想用不同的值填写$PathVariable

快速的方法是简单的双引号插值:

 my $PathVariable = 'abc';
 my $directory = "dir1/$PathVariable/dir2/dir3";
 print "Dir is <$directory>\n"; # dir1/abc/dir2/dir3

但是,您想对几个目录执行此操作。遍历所需值的列表。每次通过foreach$PathVariable@paths获取下一个值:

my @paths = qw(abc xyz);
foreach my $PathVariable ( @paths ) {
    my $directory = "dir1/$PathVariable/dir2/dir3";
    print "Dir is <$directory>\n"; 
    ... do whatever you need to do ...
    }

现在,既然已经弄清楚了那部分,那么在创建路径时需要考虑一些事情。 Perl 附带的File::Spec 模块知道如何组合适合您正在使用的系统的路径。这是一个好习惯,可以避免奇怪的情况:

use File::Spec::Functions;
my $dir = catfile( 'dir1', $PathVariable, 'dir2', 'dir3' );

还有其他 CPAN 模块也可以完成这项工作,但在您解决此问题之前可能有点多。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多