相关疑难解决方法(0)

如何测试我是否可以写入文件句柄?

我有一些我称之为的子程序myWrite($fileName, \@data). myWrite()打开文件并以某种方式写出数据.我想修改,myWrite以便我可以像上面那样调用它或者使用文件句柄作为第一个参数.(这种修改的主要原因是将文件的开头委托给调用脚本而不是模块.如果有一个更好的解决方案来告诉IO子程序在哪里写,我很高兴听到它. )

为了做到这一点,我必须测试第一个输入var是否是文件句柄.我通过阅读这个问题想出了如何做到这一点.

现在这是我的问题:我还想测试是否可以写入此文件句柄.我无法弄清楚如何做到这一点.

这就是我想要做的事情:

sub myWrite {
  my ($writeTo, $data) = @_;
  my $fh;
  if (isFilehandle($writeTo)) { # i can do this
    die "you're an immoral person\n" 
      unless (canWriteTo($writeTo)); # but how do I do this?
    $fh = $writeTo;
  } else {
    open $fh, ">", $writeTo;
  }
  ...
}
Run Code Online (Sandbox Code Playgroud)

我需要知道的是,如果我可以写入文件句柄,虽然看到一些通用解决方案可以告诉您是否使用">>"或"<"打开文件句柄,或者如果不是开放等

(请注意,这个问题是相关的,但似乎没有回答我的问题.)

perl file-io filehandle

10
推荐指数
2
解决办法
4351
查看次数

以星号*开头的Perl标识符代表什么?

我有这个子例程,其标识符定义为

*VALID_NAME_REG_EX = \"[ a-zA-Z0-9_#.:@=-]+";
*MACRO_VALID_NAME  = \"MACRO_VALID_NAME";
Run Code Online (Sandbox Code Playgroud)

我进一步查看了该文件.它们被引用为$MACRO_VALID_NAME.

我想这是用字符串的右侧替换值,但我不确定这个并想要确认.

regex perl

5
推荐指数
1
解决办法
324
查看次数

关于优先级+重复修饰符的问题

请你能解释一下这种明显不一致的行为:

use strict;
my @a;

print "a" x 2; # this prints: aa
@a = "a" x 2; print @a; # this prints: aa

print ("a") x 2; # this prints: a
@a = ("a") x 2; print @a; # this prints: aa
Run Code Online (Sandbox Code Playgroud)

不应该最后一个打印一个'a'?

编辑:好的,现在这对我来说更有意义:"二进制"x"是重复运算符...在列表上下文中,如果左操作数括在括号中或者是由qw/STRING /形成的列表,它重复了这个清单." perlop得到

这对我来说很清楚(二进制x - 为什么使用二进制这个词?是否有一个否定X?)但无论如何:@a =("a")x 2#似乎在列表上下文中,因为我们有一个数组在开头 - 一个数组不是一个列表,但它包含一个列表,所以我认为我们可能有一个列表上下文,(虽然它们可能是同义词,但不是数组上下文).

我想"左操作数"是("a").(或者是那个或@a).perlop没有说明操作数实际上是什么,查询perldoc.perl.org给出"找不到匹配",谷歌搜索给出"在计算机编程中,操作数是用于描述任何能够被操纵的对象的术语".就像数组一样.

因此左操作数可能会括在括号中,所以它可能会"重复列表".该列表是:("a") x 2 或者是:("a")

如果我们重复,("a") x 2我们会得到("a") x 2 ("a") x 2.这似乎不对.

如果我们键入:print $a[1]我们将得到一个'a',所以"它重复列表"意味着Perl变成("a") …

perl operator-precedence

3
推荐指数
1
解决办法
259
查看次数

Perl 子引用语法

那里 - 刚刚开始学习 Perl。

这就是我正在做的将数组放入子函数中的过程 - 可以在 1 行中更简单地完成吗?

sub my_sub {
    my $ref_array = shift;
    my @array = @$ref_array;
}
Run Code Online (Sandbox Code Playgroud)

perl

0
推荐指数
1
解决办法
781
查看次数

标签 统计

perl ×4

file-io ×1

filehandle ×1

operator-precedence ×1

regex ×1