gpt4 book ai didi

perl - 从 'use constant' 中的 Perl heredoc 中删除无关空格的 Perl 语法是什么?

转载 作者:行者123 更新时间:2023-12-04 16:09:17 29 4
gpt4 key购买 nike

我的代码库中的各种代码片段具有以下结构。使用heredoc 有利于我自己和其他人能够理解代码,但它为通过网络将数据传输到数据库提供了不必要的批量。

use constant FIND_OBJECTS_SQL => <<'    END_SQL';
select object_name
,object_type
,0 PAC_REF
,owner
from all_objects
where (object_name like upper(:1)
or object_name = upper(:1))
and object_type not in ('SYNONYM'
,'PACKAGE BODY')
END_SQL

$object_data = $dbh->selectall_arrayref(FIND_OBJECTS_SQL, $object_name);
将“s/\s+//g”搜索和替换运算符应用于赋值的语法是什么?
以下两次尝试均无效。
use constant FIND_OBJECTS_SQL => s/\s+/ /g <<'    END_SQL';
产生
Use of uninitialized value $_ in substitution (s///) at U:\junk.pl line 5.
Argument " END_SQL" isn't numeric in left bitshift (<<) at U:\junk.pl line 5.
use constant FIND_OBJECTS_SQL => <<'    END_SQL' =~ s/\s+/ /g;
产生
Can't modify constant item in substitution (s///) at U:\junk.pl line 15, near "s/\s+/ /g;"

最佳答案

这是一个示例,它将在将其分配给常量之前从heredoc 的每一行中去除前导空格:

use constant FOO => <<'STRING' =~ s/^\s+//mgr;
abcde
fghij
STRING

print FOO, "\n";
/r修饰符是 Perl 5.14 中的新增内容,表示目标字符串没有被修改,而是在内部复制,副本被修改,并作为替换运算符的返回值返回。例如:
my $new_string = $string =~ s/foo/bar/r;
$new_string将包含修改后的字符串,和 $string会被单独留下。

将此应用于您的代码,它可能如下所示:
use constant FIND_OBJECTS_SQL => <<'    END_SQL' =~ s/\s+/ /gr;
...
END_SQL

这与您演示的上一个示例非常相似,但添加了 /r修饰符,以便替换具有有用的返回值,并且不会尝试修改 HERE-doc 的字符串文字。

关于perl - 从 'use constant' 中的 Perl heredoc 中删除无关空格的 Perl 语法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28379316/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com