Regex perl正则表达式在标量变量中匹配并存储特定字符

Regex perl正则表达式在标量变量中匹配并存储特定字符,regex,perl,Regex,Perl,现在假设我在一个文件中有这一行: my %address = ( 或者任何类似的行,我在其中定义了散列 我想在行中找到字符“(”,并将“地址”存储在$hash_name中。我该怎么做 基本思想是捕获文件中定义的哈希的名称 我想做的是 foreach $line <MYFILE> { if($line =~ /($/ { foreach$行{ 如果($行=~/($/{ 我如何进一步进行?不确定我是否理解您的问题,但是,如何: my %hash; while (my $line

现在假设我在一个文件中有这一行:

my %address = (
或者任何类似的行,我在其中定义了散列

我想在行中找到字符“(”,并将“地址”存储在$hash_name中。我该怎么做

基本思想是捕获文件中定义的哈希的名称

我想做的是

foreach $line <MYFILE> {
  if($line =~ /($/ {
foreach$行{
如果($行=~/($/{

我如何进一步进行?

不确定我是否理解您的问题,但是,如何:

my %hash;
while (my $line = <MYFILE>) {
    if ($line =~ /\%(\w+)\s*=\s*\($/) {
        $hash{$1} = 1;
    }
}
my%hash;
while(我的$line=){
如果($line=~/\%(\w+)\s*=\s*\($/){
$hash{$1}=1;
}
}
打开(F1,“inputfile.txt”)或死亡(“无法打开inputfile.txt”);
我的$hash\u名字
而(){
如果(/%(\w+)*=*\(/){
$hash_name=$1;
打印$hash_名称;
}
}

您是否考虑过使用
PPI
?您是想学习如何使用正则表达式还是想解析perl?@dgw-我想知道如何完成我所问的上述特定任务。这是您想要的吗?这个问题意味着您正试图用一种非常脆弱的解决方案来解决一些未知问题这个时代的座右铭是“有多种方法可以做到”充其量是受虐狂。为什么不提一下您试图通过提取哈希名称来完成什么?它是如何存储哈希名称的?请您详细说明一下?@VinodRM:
$1
在您的示例中包含
地址
。然后我们在哈希
%hash
中创建一个条目,其中包含键
地址
,并放入
1
作为值。@M42:如果您的代码接近编译,那就太好了。有许多括号,一个大括号和一个等号丢失了。@Borodin:你说得对,更正了。我只是没有仔细检查OP的代码。@M42:close!
while(我的$line=){…}
和一个额外的右大括号。@siddharth c nadhan--非常感谢Anks做了一些更正。不过:如果open失败,您需要在错误中包含
$!
$hash_name
应该使用
my
声明为词法变量;
open (F1,"inputfile.txt") or die("unable to open inputfile.txt");
my $hash_name
    while (<F1>) {
        if (/%(\w+) *= *\(/) {
            $hash_name = $1;
            print $hash_name;
        }
    }