美文网首页
02.Perl -- 标量、数组、引用

02.Perl -- 标量、数组、引用

作者: QXPLUS | 来源:发表于2022-05-18 11:19 被阅读0次

1. 标量(变量)

  • Scalar, 故以$开头

数字标量:值是“数字”的标量

Perl中的数字:

  • 全部为双精度浮点数
  • 科学计数法 E、e一样
  • 特殊数字,如 :
    较长的、不带小数点的数字,可以用下划线分开表示
    3141592639 => 3_141_592_639
    下划线的插入,不影响数值

字符串标量

  • 标量为字符串,由引号标识(单引号/双引号)
  • 字符串又可输出的字母、数字、标点符号组成
    $data="Hello, World"

单引号 vs 双引号

  • 转义字符, 只在双引号中有效
    \n 换行
    \r 回车
    \t 水平制表符
    \f 换页符
    \l 下个字符转小写
    \u 下个字符转大写

标量的声明

  • 标量可以在任意位置随时声明并使用(推荐),也可以不声明而直接使用。
$test1=5;
$test2=10;
...
my $result=$test1+$test2
  • 标量名:字母、数字、下划线,区分大小写。取名应和用途相关。

标量的作用域

  • 标量可以被有效访问使用的范围
    包变量:全局变量

私有变量,分为my 类型和local类型

  • my变量: 只在本层({}之间,成为一层)模块可以看到这个变量 (函数变量【不包括子函数】)。 子函数不可以使用my变量。
  • local变量:本层和本层下层的函数都可以看到的变量(本层以上不可以用)(函数变量)。子函数可以使用local变量。
sub g_print{
    print "$x\n";
}

sub test_my{
    my $x=11;
    print "call-my $x\n";
    g_print
}

sub test_local{
    local$x=20;
    print "call-local $x\n";
    g_print
}

$x=9;
test_my;
# call-my 11
# 9
test_local
# call-local 20
# 20
print $x;
# 9

2. 数组

  • 数组,是标量数据的有序列表,是多个标量数据的合集。
  • @ 符号作为标识
  • 列表元素,以括号标识,中间用逗号隔开
@a= (1, 2, 'Hello');
# 可以通过下标调用
print "$a[0]\n";
# 1
print "$a[1]\n";
# 2
print "$a[2]\n";
# Hello

范围操作符..

.., 该操作符会从坐标的数字以此+1,产生一串数字

  • (1..5)
    (1,2,3,4,5)
  • (0,2..6,10)
    (0,2,3,4,5,6,10)
  • (5..1)
    空列表, 因为5是不能加到1的

qw 应用于纯字符串列表

  • 对于纯字符串列表, 使用qw来表示, 可省去对字符串加引号的过程。
    形式为:
    qw(string1 string2 string3) # 空格、制表符、换行符都可以用作间隔符
    等同于
    ("string1","string2","string3")

  • 也可以用其他符号代替括号,如:
    qw !string1 string2 string3!
    qw /string1 string2 string3/

数组赋值

  • 直接将列表传递给数组
    @array=("string1",1.5,418)
  • qw生成的列表,再赋值给数组
    @array=qw(string1 string2 string3)
  • 数组之间赋值
@array1=("string1",1.5,418)
@array2=@array1
# 对array2的修改不会影响array1
  • 直接使用数组或者将数组赋值为变量时,表示数组的元素个数
    这相当于python 当中的len(array)
#!perl -w
use warnings;
# 在这里 @ARGV 代表的是ARGV这个参数数组的长度(即输入的参数个数)
if (@ARGV != 5) {
    print "Usage: perl subreads.pl reads1 reads2 random sample dir\n";
    exit;
}
  • 特殊的赋值方法
    pop 和 push赋值
    shift 和 unshift复制

  • pop 操作符
    去除数组的最后一个元素(最右边),同时返回该元素的值

@array=(5..9)
$test1=pop(@array)
# test1=9
# array=(5,6,7,8)
  • push 操作符
    添加一个元素(或一串元素)到数组的末尾。
@array=(5,6)
push(@array,8)
# array = (5,6,8)
push(@array,1..5)
# array = (5,6,8,1,2,3,4,5)
  • shift 操作符
    去除数组最左边的元素,同时返回该元素值。
    pop相对应
@array2=(5..9)
$test1=shift(@array)
# test1=5
# array2=(6,7,8,9)
  • unshif操作符
    添加一个元素(或一串元素)到数组的最左边
    push相对应
@array2=(5,6)
unshift(@array2,8)
# array2 = (8,5,6)
unshift(@array2,1..5)
# array2 = (1,2,3,4,5,8,5,6)

特殊索引值

  • $#<数组名> 代表最后元素的索引值
    @array=("Hello","World",1..99,qw/Long string/, 2..16) # 共118个元素
    $end=$#array # 117

  • 负数索引
    $array[-1] # 最后一个元素

3.引用

  • 引用,作为一种数据变量,可以指向变量、数组甚至子程序,存储值的地址
  • 在Perl中,可以把引用成为指针,二者是通用的无差别的。

引用的方法

软引用

  • 类似于软链接,存储一个变量的名字
$scalar="Hello"
@scalar=("Hello", "World",123)

## 通过引用变量名来引用变量
$refer="scalar"
-  软引用的解引用
$$refer  # 类似于 $scalar
# 数组的引用
$$refer[0]  # 类似于 $scalar[0]

软引用相当于替代变量名的过程

硬引用 (常用)

  • 类似于硬链接,就是存储地址
$foo='hello';
# 通过引用地址来引用变量foo
$scalerref=\$foo;
# 常量引用
$constref=\186_282.42
# 数组引用
@arr=1..100
$arrayref=\@arr;
# 匿名数组的引用
$arrRef=[1,2,3,4,5];
  • 硬引用的解引用
    由于引用的是地址,所以用{}来进行解引用
$foo='hello';
$scalerref=\$foo;
# 变量解引用
${$scalerref}  # 简写 $$scalarref

$constref=\186_282.42
# 常量解引用
${$constref}  # 简写 $$constref

@arr=1..100
$arrayref=\@arr;
# 数组解引用
${$arrayref}[0]

$arrRef=[1,2,3,4,5];
# 匿名数组的解引用
${$arrRef}[0]
  • 引用有助于创建复杂数据,比如多维数组。

相关文章

  • 02.Perl -- 标量、数组、引用

    1. 标量(变量) Scalar, 故以$开头 数字标量:值是“数字”的标量 Perl中的数字: 全部为双精度浮点...

  • 第3章 列表与数组

    列表(list):标量的有序集合。--数据数组(array):储存列表的变量。--变量“标量-标量变量;列表-数组...

  • ndarray数组的运算

    数组与标量之间的运算数组与标量之间的运算作用于数组的每一个元素

  • perl-three(2018-05-26)

    第三章 列表和数组 标量代表单数,那么列表和数组就代表复数。 列表是标量的有序集合(指的是数据),数组是存储列表的...

  • ndarray数组的运算

    数组与标量之间的运算 数组与标量之间的运算作用于数组的每一个元素 NumPy一元函数 对ndarray中的数据执行...

  • 3.4Python数据处理篇之Numpy系列(四)---ndar

    目录 [TOC] 1.数组与标量的运算2.元素级的运算(一元函数)3.数组级的运算(二元函数) (一)数组与标量的...

  • Tensor 张量

    Tensor 张量 张量类似于多维数组,它是标量、向量、矩阵的高维拓展; 可以将标量看做0维张量,数组看做是一维张...

  • Numpy教程(4)

    Numpy基本操作 数组与标量、数组之间的运算 数组的矩阵积(matrix product) 数组的索引和切片 数...

  • 三 ndarray 数据基本操作

    ndarray 数据基本操作 (1)数组与标量、数组之间的运算 (2)数组的矩阵积(matrix produ...

  • Perl:标量,数组,哈希

    Perl标量 标量是一个简单的数据单元。标量可以是一个整数,浮点数,字符,字符串,段落或者一个完整的网页。 1. ...

网友评论

      本文标题:02.Perl -- 标量、数组、引用

      本文链接:https://www.haomeiwen.com/subject/hetaurtx.html