是什么区别$this,@that和%those在Perl?
我刚刚收到了一堆遗留的VB6(!)代码,我不断看到在名称末尾用符号声明的函数,例如Private Declare Function ShellExecute& . . ..
我一直无法找到对此重要性的答案,也无法检测到任何使用的模式或已经命名的函数的签名.
任何人都知道那些尾随的&符号对编译器意味着什么,或者至少是否有一些我缺少的约定?到目前为止,我将其作为一个奇怪的程序员写下来,但我想知道它背后是否有任何意义.
Raku 符号表示基础变量的性质(例如,$scalar、@positional、%associative、&code)。
可以使用反斜杠将变量声明为无印记(例如,\some-variable),然后在不使用印记的情况下引用它(即,some-variable)。
只是想知道在什么情况下首选使用无符号变量?
我有时会看到(对我而言)在变量前面使用错误符号的代码
my $arr = [1, 2, 3, 4, 5]; # an array
my $lst = (1, 2, 3, 4, 5); # a list
my $hash = {a => '1', b => '2'}; # a hash
my $func = -> $foo { say $foo }; # a callable
Run Code Online (Sandbox Code Playgroud)
这一切都完全按预期工作
say $arr[0]; # 1
say $lst[1]; # 2
say $hash<a>; # 1
say $hash{'b'}; # 2
$func('hello'); # hello
Run Code Online (Sandbox Code Playgroud)
我知道的Perl只让收藏店标量,要求之类的多维数组通过数组引用来完成,以[...]和{...}为数组和散列引用分别文字。
为了扩展和澄清我在这里的意思,基本上有两种定义事物的方法,通过值和通过引用:
my $arr …Run Code Online (Sandbox Code Playgroud) 由于数组和散列只能包含Perl中的标量,为什么在访问数组或散列元素时必须使用$来告诉解释器该值是标量?换句话说,假设您有一个数组@myarray和一个哈希%myhash,为什么需要这样做:
$x = $myarray[1];
$y = $myhash{'foo'};
Run Code Online (Sandbox Code Playgroud)
而不只是做:
$x = myarray[1];
$y = myhash{'foo'};
Run Code Online (Sandbox Code Playgroud)
为什么上面的含糊不清?
如果除了那个地方的$之外,它不是非法的Perl代码吗?例如,Perl中的以下都不是非法的吗?
@var[0];
@var{'key'};
%var[0];
%var{'key'};
Run Code Online (Sandbox Code Playgroud) 在使用用户定义的变量时,有没有"@" - sigil我不能做的事情?
#!perl6
use v6;
my $list = <a b c d e f>;
my @list = <a b c d e f>;
$list.list.perl.say;
@list.perl.say;
$list[2..4].say;
@list[2..4].say;
$list.elems.say;
@list.elems.say;
$list.end.say;
@list.end.say;
say 'OK' if $list ~~ /^c$/;
say 'OK' if @list ~~ /^c$/;
Run Code Online (Sandbox Code Playgroud) 我遇到了这个,期待它是一个错字$@:
use strict;
use warnings;
eval {
my $error = Not::Here->new();
};
warn @$;
Run Code Online (Sandbox Code Playgroud)
令我惊讶的是它输出了这个:
不能通过包"未::这里"找到对象的方法"新"(或许你忘了装载"不::在这里?")在dollar_array.pl 6行......在dollar_array.pl线9抓获.
我无法找到任何有关的信息@$,它没有在perlvar上列出,也没有在eval中列出
由于输出显示caught at ...,似乎这是perl的异常处理中的一些东西.
是否可以在PHP中以类似Java的方式命名变量,例如$每次都不需要符号?如果是这样,我该如何启用这样做的设置?
当使用相同字母名称但使用不同符号的变量时,似乎存在一些不一致的行为:
> my $a="foo";
foo
> my @a=1,2
[1 2]
> say $a
foo # this is what I have expected
> my $b = 1,2,3
(1 2 3)
> my @b = (0, $b.Slip)
[0 1] # I expect to get [0 1 2 3]; (0, |$b) not work either
> say $b
1 # I expect $b to be unchanged, (1,2,3), but it is now 1;
> say @a
[1 2]
> say @b
[0 1]
>
Run Code Online (Sandbox Code Playgroud)
我不确定为什么 …
我正在尝试使我的Monotouch应用程序与WCF服务一起使用.一切正常,但时不时(10 - 30次服务电话),应用程序崩溃与SIGIL.调试器就是这么说的.它发生在随机的地方.
另一名员工在使用相同服务的iPhone应用程序上工作.同样的问题,但更频繁.
在模拟器上测试时,一切都很棒.
如果有人有同样的问题,请帮忙.使用asmx服务会有帮助吗?
谢谢你们.
干杯