这些正则表达式之间有什么区别 - perl

moa*_*eep 0 perl

我在文件image1.hd中有一行文字

axial rotation:=0.880157
Run Code Online (Sandbox Code Playgroud)

我想要这个号码.使用核心perl我这样做

open FILE, "<", "$Z_DIR/image1.hd" or die $!;
  while (<FILE>){
    if (/axial rotation:=(\S+)/)
      {
    $axial_rot = $1;
      }
  }
  close FILE;
Run Code Online (Sandbox Code Playgroud)

返回所需的输出= 0.880157

我更喜欢一个班轮,因为我会做一些类似于其他一些文件.之前我了解了File :: Slurp模块,我尝试了以下内容,并在断言后面进行了正面观察

my $axial_rot = read_file("$Z_DIR/image1.hd") =~ /(?<=axial rotation:=)\S+/
Run Code Online (Sandbox Code Playgroud)

这将返回1 - 无论正则表达式如何.如何更改后一个正则表达式以实现所需的输出

cho*_*oba 5

问题是您在标量上下文中使用赋值,这使匹配返回匹配数.通过切换到列表上下文,您可以使用匹配组来返回所需的子字符串:

my ($axial_rot) = read_file("$Z_DIR/image1.hd") =~ /axial rotation:=(\S+)/;
Run Code Online (Sandbox Code Playgroud)