Perl中“@”和“$”之间的区别

时间:2012-08-01 07:19:58

标签: perl

Perl中@variable$variable之间有什么区别?

我在变量名称前面读过带有符号$和符号@的代码。

例如:

$info = "Caine:Michael:Actor:14, Leafy Drive";
@personal = split(/:/, $info);

包含$而非@的变量有什么区别?

6 个答案:

答案 0 :(得分:6)

实际上并不是关于变量,而是关于 context 更多关于如何使用变量的信息。如果在变量名前加上$,那么它将在标量上下文中使用,如果你有@表示你在列表上下文中使用变量。

  • my @arr;将变量arr定义为数组
  • 当您想要访问一个单独的元素(即标量上下文)时,您必须使用$arr[0]

您可以在此处找到有关Perl上下文的更多信息:http://www.perlmonks.org/?node_id=738558

答案 1 :(得分:5)

当你感觉这种语言的背景时,你对 Perl 的所有知识都将与山崩溃。

和很多人一样,你在演讲中使用单值(标量)和一组中的许多东西。

所以,所有这些之间的区别:

我有一只猫。 $myCatName = 'Snowball';

它跳到床上@allFriends = qw(Fred John David);

你可以算上$count = @allFriends;

但无法统计它们的原因列表中的数字不可数:$nameNotCount = (Fred John David);

毕竟:

print $myCatName = 'Snowball';           # scalar
print @allFriends = qw(Fred John David); # array! (countable)
print $count = @allFriends;              # count of elements (cause array)
print $nameNotCount = qw(Fred John David); # last element of list (uncountable)

因此,列表数组不一样。

有趣的功能是切片,你的大脑将与你一起玩耍:

这段代码很神奇:

my @allFriends = qw(Fred John David);
$anotherFriendComeToParty =qq(Chris);
$allFriends[@allFriends] = $anotherFriendComeToParty; # normal, add to the end of my friends
say  @allFriends;
@allFriends[@allFriends] = $anotherFriendComeToParty; # WHAT?! WAIT?! WHAT HAPPEN? 
say  @allFriends;

所以,毕竟:

Perl 有一个关于上下文的有趣功能。您的$@是符号,可以帮助 Perl 了解您想要的,而不是真正意味着什么

$喜欢s,所以标量为 @就像a一样,所以数组

答案 2 :(得分:3)

以$开头的变量是标量,单个值。

   $name = "david";

以@开头的变量是数组:

   @names = ("dracula", "frankenstein", "dave");

如果您引用数组中的单个值,则使用$

   print "$names[1]"; // will print frankenstein

答案 3 :(得分:2)

来自perldoc perlfaq7

  

所有这些$ @%& *标点符号是什么,以及我如何知道何时使用它们?

     

它们是类型说明符,详见   perldata

$ for scalar values (number, string or reference)
@ for arrays
% for hashes (associative arrays)
& for subroutines (aka functions, procedures, methods)
* for all types of that symbol name. In version 4 you used them like
  pointers, but in modern perls you can just use references.

答案 4 :(得分:1)

Variable name starts with $ symbol called scalar variable.
Variable name starts with @ symbol called array.

$var -> can hold single value.
@var -> can hold bunch of values ie., it contains list of scalar values.

答案 5 :(得分:0)

$用于标量变量(在您的情况下是一个字符串变量。) @用于数组。

split函数将根据提到的分隔符(:)拆分传递给它的变量,并将字符串放入数组中。