perl中的wantarray()函数

perl中常用系统函数 小骆驼书中提到的Perl常用系统函数:print printf chop split sort keys 立即下载

用法

wantarray

说明

根据函数被赋值的类型(是列表还是标量),返回不同的值

  • 当不对定义的函数的返回值赋值时,wantarray返回undef;
  • 当把定义的函数的返回值进行赋值,赋值给标量的时候,wantarray返回空字符串(空字串与undef不同);
  • 当把定义的函数的返回值进行赋值,赋值给列表的时候,wantarray返回1;

例子

其实文字表述不方便,而且直接看该命令的名字wantarray,就是“想要?想要列表”?有点不好理解,那么直接上例子。

#!perl 

# 定义函数
sub wantarray_example{
    # defined wantarray 判断函数的返回值是否进行赋值了
    if(defined wantarray){
        print "assignment!\n";
    }else{
        print "no assignment!\n";
    }

    # wantarray 判断函数的返回值赋值给变量的类型,如果是列表,则返回1,否则返回undef
    if(wantarray){
        print "It is List!\n";
        return qw/1 2 3 4/;
    }else{
        print "It is Scalar!\n";
        return "A";
    }
}

# 调用函数

# 不对函数的返回值进行赋值
print "======example1======\n";
wantarray_example();

# 对函数的返回值进行赋值,但是赋值给一个列表
print "======example2======\n";
my @list = wantarray_example();

# 对函数的返回值进行赋值,但是赋值给一个标量
print "======example3======\n";
my $scalar = wantarray_example();

# 将存贮在变量中的值打印出来
print "======print value======\n";
print "LIST  : @list\n";
print "SCALAR: $scalar\n";

最后运行结果为

======example1======

no assignment!

It is Scalar!

======example2======

assignment!

It is List!

======example3======

assignment!

It is Scalar!

======print value======

LIST  : 1 2 3 4

SCALAR: A

从结果中可以得到

把函数结果进行赋值给列表,wantarray返回1,否则(赋值给标量或者不赋值),wantarray返回undef。可是在defined那里,发现当赋值给标量的时候,defined wantarray好像返回的是1。

======example3======

assignment!

It is Scalar!

就是这里

为了证实 wantarray 和 defined wantarray 的返回值,再运行下列代码

#!perl 

# 定义函数
sub wantarray_example{
    print "*",wantarray,"*","\n"; 
    print "*",defined wantarray,"*","\n";
}

print "====NO ASSIGN====\n";
wantarray_example();
print "====SCALAR====\n";
my $scalar = wantarray_example();
print "====LIST====\n";
my @list = wantarray_example();

结果为

====NO ASSIGN====

**

**

====SCALAR====

**

*1*

====LIST====

*1*

*1*

可以看到在将函数的返回值赋值给标量那里,wantarray的值和defined wantarray不对应。说明当把函数的结果赋值给标量的时候wantarray的返回值不是undef,也不是0,而是空字符串。何以见得呢?

再次运行下列代码

#!perl

my $value1 = undef;   # undef
my $value2 = 0;       # 0
my $value3 = "";      # 空字符串

# 先打印出对应的defined的值
print "======defined======\n";

print "*",defined $value1,"*","\n";
print "*",defined $value2,"*","\n";
print "*",defined $value3,"*","\n";

# 再打印出变量本身的值
print "======self======\n";

print "*",$value1,"*","\n";
print "*",$value2,"*","\n";
print "*",$value3,"*","\n";

结果为

======defined======

**

*1*

*1*

======self======

**

*0*

**

得到结论

  • 当不对定义的函数的返回值赋值时,wantarray返回undef;
  • 当把定义的函数的返回值进行赋值,赋值给标量的时候,wantarray返回空字符串(空字串与undef不同);
  • 当把定义的函数的返回值进行赋值,赋值给列表的时候,wantarray返回1;
所以我将刚开始的代码改成这样,就能很好的说明问题了
#!perl 

# 定义函数
sub wantarray_example{
    # 判断函数的返回值是否进行赋值了
    if(defined wantarray){
        print "assignment!\n";
    }else{
        print "no assignment!\n";
    }

    # 判断函数的返回值赋值的类型
    if(wantarray){
        print "It is List!\n";
        return qw/1 2 3 4/;
    }elsif(defined wantarray){
        print "It is Scalar!\n";
        return "A";
    }else{
        print "It is BLANK!\n";
    }
}

# 调用函数

# 不对函数的返回值进行赋值
print "======example1======\n";
wantarray_example();

# 对函数的返回值进行赋值,但是赋值给一个列表
print "======example2======\n";
my @list = wantarray_example();

# 对函数的返回值进行赋值,但是赋值给一个标量
print "======example3======\n";
my $scalar = wantarray_example();

# 将存贮在变量中的值打印出来
print "======print value======\n";
print "LIST  : @list\n";
print "SCALAR: $scalar\n";

结果为

======example1======

no assignment!

It is BLANK!

======example2======

assignment!

It is List!

======example3======

assignment!

It is Scalar!

======print value======

LIST  : 1 2 3 4

SCALAR: A

那么这个函数就变得灵活多变了,可以根据上下给出不同的返回值!酷!

我学编程没有多久,文章中间可能会有问题,请多多指教!

参考:

http://blog.chinaunix.net/uid-13703776-id-67803.html

https://blog.youkuaiyun.com/frt007/article/details/42681089

从零开始开发AI Agent:基于大模型的智能体实战指南 ### 摘要 本文介绍了AI Agent的开发全流程,从基础概念到实际部署,涵盖大模型集成、工具调用和记忆系统构建等核心技术。通过电商客服案例展示实战应用,并提供调试优化与部署方案,最后展望了AI Agent的未来发展方向,帮助开发者快速掌握智能体开发技能。 阅读详情

相关推荐

Ubuntu 24.04 部署 EMQX 5.8 开源版MQTT服务器:从零搭建到实战应用

本文详细指导如何在Ubuntu 24.04系统上部署EMQX 5.8开源版MQTT服务器。内容涵盖从环境准备、安装Erlang、下载安装包到启动服务的完整步骤,并提供了验证服务、配置网络防火墙以及通过WebSocket工具进行基础消息收发的实战方法,帮助用户快速搭建稳定、免费的物联网消息中间件。

weixin_29209825的博客 293

Perl wantarray()

Perl wantarray()函数 原文:http://blog.youkuaiyun.com/frt007/article/details/42681089 1. 语法 wantarray 2. 定义和用法 返回true,如果当前正在执行的函数的上下文中正在寻找一个列表值。 在标量上下文,则返回false。 3. 返回值 · undef - 如果没有上下文 · 0 如果左值期望标量 4. 例子 us...

weixin_45524582的博客 232

Spring WebFlux响应式编程实战(三):优雅处理异常与高效调试技巧

本文深入探讨了Spring WebFlux响应式编程中的异常处理与调试技巧。文章通过电商订单流处理场景,详细解析了Reactor核心操作符onErrorReturn、onErrorResume和onErrorMap的实战应用,并介绍了如何构建@ControllerAdvice和WebExceptionHandler全局异常处理防线。同时,提供了使用.log()操作符、Hooks.onOperatorDebug()及BlockHound进行高效调试的方法,旨在帮助开发者构建健壮、可维护的响应式应用。

weixin_29252171的博客 67

无涯教程-Perl - wantarray函数

无涯教程网提供描述如果当前正在执行的函数的context正在寻找列表值,则此函数返回true。在标量contex...如果当前正在执行的函数的context正在寻找列表值,则此函数返回true。在标量context中返回false。如果没有context,则此函数返回undef;如果lvalue需要标量,则该函数返回0。Perl 中的 wantarray函数 - 无涯教程网。以下是显示其基本用法的示例代码-执行上述代码后,将产生以下输出-以下是此函数的简单语法-

无涯教程 888

无人驾驶小车调试笔记(六)-- 车轮校准

简介:小车的动力完全来自于两个电机带动的车轮,在理想状态下,给两个电机同样的驱动参数,两个车轮会以同样的转速带动小车直线行驶,而实际情况是每个电机可能都会有个体差异,也就是说给予同样的驱动参数,表现出的转动速度会有些许不同,两个轮子的差速会导致车辆拐弯,后果就是给了直线行驶的控制命令,但是车走着走着就偏离了原本的方向,所以在开始控制之前,我们需要先平衡两个车轮的转速,保证在同样驱动参数下,两个车轮转速大致相同,也就是可以走直线。 车轮校准分为3步,测试、调整后再测试、保存参...

aibingjin的博客 1822

n8n 快速入门1:构建一个简单的工作流

n8n 快速入门指南

engchina的专栏 1万+

Perl-子程序2

1. 子程序中的私有变量 默认情况下Perl里的所有变量都是全局变量,即在程序里的任何地方都可以访问它们 可以借助my来创建私有变量,这叫词法变量(lexical variable) sub max{ my($m,$n); # 该语句块中的新私有变量 ($m,$n) = @_; # 将参数赋值给变量 if($m > $n){ $m } else { $n } } 这些变量属于封闭语句块中的私有变量(也可称作有限作用域变量) 语句块外任意地方的$m或$n都完全不受这2个私有变量的影响 外部变量同

Arkardia的博客 293

vcenter server6.0上vmware inventory 、virtualvcenter等服务无法开启

描述:一天,vcenter访问不了,因此Windows远程到vcenter server上。相关服务未开启,开启virtualCenter server服务提示相关依赖服务未开启,于是开启依赖项服务Inventory服务报错。然后打算使用 C:\Program Files\VMware\vCenter Server\bin\servcivce-control来开启vmware服务 1....

Pespi_Co1a的博客 3070

perl函数的参数接收方法

重拾perl原文:http://www.linuxsir.org/bbs/showthread.php?t=78216Perl 函数和作用域。语法:Sub subroutineName{my (@argsTosubroutine) = @_; # 参数通过这种方式传递给函数&doStuff; # 执行体return ( @returnValue ); # }特殊变量 @_ 是参数栈

phphot 8162

【Bug已解决】codex: rate limit 429 / Too many requests / RPM exceeded — CodeX CLI 速率限制解决方案

CodeX CLI 触发 429 速率限制(RPM/TPM/并发)的解决方案,含请求间隔、自动重试、便宜模型、Tier 升级与多 Key 轮换。

博客 4892

TI Sitara系列AM64x开发板(双核ARM Cortex-A53)软硬件规格书

创龙科技TL64x-EVM是一款基于TI Sitara系列AM64x双核ARM Cortex-A53 + 单/四核Cortex-R5F + 单核Cortex-M4F多核处理器设计的高性能评估板,由核心板和评估底板组成。评估板接口资源丰富,引出5x Ethernet(两路支持TSN)、2x CAN-FD、多路UART、多路DI/DO、GPMC、PCIe、USB等接口,板载WIFI模块,支持4G/5G模块、NVME硬盘,可选配外壳直接应用于工业现场,方便用户快速进行产品方案评估与技术预研。

创龙,嵌入式一体化解决方案商 727

perl wantarray()

语法 wantarray 定义和用法 返回true,如果当前正在执行的函数的上下文中正在寻找一个列表值。在标量上下文,则返回false。 返回值 undef - 如果没有上下文 0 如果左值期望标量 例子 #!/usr/bin/perl -w #by www.yiibai.com sub foo { re

frt007的专栏 1130

从服务器到桌面超算:当3999美元的NVIDIA DGX Spark装上Ubuntu,普通开发者能玩出什么花?

DGX Spark的出现,标志着AI算力正在经历从"数据中心集中供给"到"个人桌面按需拥有"的范式转移。它让开发者可以在本地完成从数据预处理、模型微调到推理验证的全流程,只有在需要大规模训练时才调用云端资源。迭代速度:从按小时计费的云端调试,变成随时随地的本地实验数据主权:敏感信息永不离开本地成本可控:一次投入,长期使用,不受API调用次数限制AI算力民主化的时代,真的来了。你的下一台超级计算机,不必在云端。它就在你的桌面上,安静地等待着你的下一个创意。附录:实用资源。

QQ_778132974的博客 623

Perl(十一)数组和列表二

一、函数续 练习1 #!/usr/bin/perl use strict; use warnings FATAL => 'all'; #(1)练习1 print "split示例:"; my $a='a,b,c'; # 模式(分割的条件) 操作的字符串 数组的长度 my @b=split(/,/,$a,2); print "@b"; #(2)练习2 print "\nmap示例...

wzj_110的博客 323

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Perl中关于用户定义子程序的返回值(基础)

返回值 就如其他Perl表达式,调用子程序也会在不同上下文中有不同的行为。你可以使用wantarray函数(也可以叫做wantlist)来检测子程序处于什么上下文当中,并返回一个合适的结果到上下文: subcontextualSubroutine{ #Callerwantsalist.Returnalist return("Eve...

weixin_33752045的博客 412

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Perl 教学 函数集

一、进程处理函数1、进程启动函数 函数名 eval 调用语法 eval(string) 解说 将string看作Perl语句执行。正确执行后,系统变量$@为空串,如果有错误,$@中为错误信息。 例子 $print = "print (\"hello,world\\n\");";eval ($print); 结果输出 hello, world ...

weixin_34406796的博客 295

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Perl CH11 子例程与函数笔记

格式:**subroutine declaration:** sub subroutine_name; **subroutine definition:** sub subroutine_name{block} **subroutine call:** do suroutine_name; &subroutine_name; subroutine_name()

开发学习者 584

Learning Perl: 4.10. Non-Scalar Return Values

<br /> 4.10. Non-Scalar Return Values<br />A scalar isn't the only kind of return value a subroutine may have. If you call your subroutine in a list context,[] it can return a list of values.<br />[] You can detect if a subroutine is being evaluated in a s

土豆小张的专栏 404

用wantarray 按需返回列表

假如需要知道调用时的上下文环境,我们可以用wantarray操作符,如果子程序调用时处于列表上下文,它会返回真。 sub sorted_text_files { if(wantarray){ sort @files; #列表上下文返回列表 }else { join ' ',sort @files ; #标量上下文时,返回字符串 ...

weixin_30699955的博客 154

perl数组函数

grep:在列表中抽取与指定模式匹配的元素 调用语法 @foundlist=grep(pattern,@searchlist); 参数pattern为欲查找的模式,返回值是匹配元素的列表。 @list=("This","is","a","test"); @foundlist=grep(/^[tT]/,@list); splice:可以向列表(数组)中...

weixin_33708432的博客 261

Perl原码分析3

无意看到一个文件:

郝玉杰的专栏 1088

STM32通过STLINK实现高效烧录的完整指南

本文提供了一份详尽的STM32通过STLINK进行高效烧录的完整指南。从硬件连接、驱动安装到软件环境配置,手把手教你使用STM32CubeIDE和STM32CubeProgrammer完成程序烧录与调试,并针对常见连接失败、烧录错误等问题提供了实用的避坑解决方案,帮助开发者快速掌握核心技能。

pp12345的博客 232

perl入门经典阅读笔记之四:第七章:子程序

明显感觉到译者把这一章是分给两个人在翻译的,原因如下:153页第一段:声明变量,英文原文是: state variable,同样是153页的倒数第三段,闭环,这个字英文版里面是Closure,明显是错误的!后续在166页,把同样的closure翻译成闭包。可以看出,这一章是两个人在做的翻译,而...

chuanxifu4422的博客 143

Perl函数

        Perl函数也叫子程序,用sub关键字定义,没有显示的参数列表,用‘@_’可以获取实参列表,用return返回value。具体用法在后面的demo中体现。 关于变量作用域          Perl中的变量默认是全局的,如果需要限制变量的作用域,比如定义子程序的私有变量,就用关键字my做声明。          local关键字可以为全局变量做临时声明,对其修改访问都只针对临...

Hunk的菜鸟之路 2618

两个半小时学会Perl

两个半小时学会PerlBy Sam Hughes译者:胡瀚森(Sam Hu) (阅读原文)Perl是一门动态的、动态类型的高阶脚本(解释型)语言,常常与PHP和Python相提并论。Perl的语法借鉴了许多古老的Shell脚本,并且因为过度使用难懂的符号而声名狼藉,这使得人们几乎无法从Google搜索到想要的语法知识。Perl作为一门脚本语言非常适合用作胶水语言,将其他脚本和程序连接到一起。Per...

ringliwei 3650

两个半小时的Perl飞升之旅

Perl 语言的设计哲学是:"每个问题都有许多解决方式"(TMTOWTDI)( 与之相反,Python的设计哲学是:每个问题应该只有一种,而且只有一种明确的,最好的解决方式)。 AD: 2013云计算架构师峰会课程资料下载 Perl语言是一门高级解释型动态语言,它的许多数据类型是运行时才确定的,并且经常和PHP和 Python相提并论。Per

jiaoyun007的专栏 1469
上一篇: IDEA IntelliJ如何配置Perl的运行环境
下一篇: MCScanX安装出错
crazy_kangaroo
博客等级 码龄10年 2粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值