首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >为什么Perl函数"map“给出错误”map的参数不够“?

为什么Perl函数"map“给出错误”map的参数不够“?
EN

Stack Overflow用户
提问于 2014-01-09 14:39:42
回答 3查看 1.3K关注 0票数 8

这是我不明白的事。

此脚本工作正常(请注意映射函数中的级联):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;

my %aa = map { 'a' . '' => 1 } (1..3);

print Dumper \%aa;

__END__
output:

$VAR1 = {
          'a' => 1
        };

但是如果没有连接,地图就无法工作。下面是我期望的脚本,但它不起作用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;

my %aa = map { 'a' => 1 } (1..3);

print Dumper \%aa;
__END__
output:

Not enough arguments for map at e.pl line 7, near "} ("
syntax error at e.pl line 7, near "} ("
Global symbol "%aa" requires explicit package name at e.pl line 9.
Execution of e.pl aborted due to compilation errors.

你能解释一下这种行为吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-01-09 14:49:26

Perl使用启发式方法来决定是否使用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
map { STATEMENTS } LIST;   # or
map EXPR, LIST;

因为虽然"{“通常是块的开始,但它也可能是哈希the的开始。

这些启发式算法在令牌流(IIRC,两个令牌)中不会向前看太远。

可以使用以下方法强制"{“被解释为块:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
map {; STATEMENTS } LIST;    # the semicolon acts as a disambigator

可以使用以下方法强制将"{“解释为散列:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
map +{ LIST }, LIST;    # the plus sign acts as a disambigator

grep同样遭受着同样的痛苦。(从技术上讲,do也是如此,因为哈希then可以作为参数给出,然后将其作为文件名进行串并处理。不过,这很奇怪。)

票数 12
EN

Stack Overflow用户

发布于 2014-01-09 14:48:44

根据Documentation for map

因为Perl并不期待关闭的},所以它必须根据它在{之后发现的内容来猜测它所处理的是什么。通常情况下,它是正确的,但如果它没有,它将不会意识到某些事情是错误的,直到它到达}

举例说明:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
%hash = map {  "\L$_" => 1  } @array # perl guesses EXPR. wrong
%hash = map { +"\L$_" => 1  } @array # perl guesses BLOCK. right

因此,添加+将给出与给出的第一个示例相同的结果

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
my %aa = map {  +'a'=> 1 } (1..3);
票数 6
EN

Stack Overflow用户

发布于 2014-01-09 14:49:38

在地图的上下文中,大括号有点模糊。它们可以按您的意图包围一个块,也可以是一个匿名哈希构造函数。perl解析器中有一些模糊逻辑,它试图猜测您指的是哪一个。

您的第二个例子看起来更像是perl的匿名散列。

请参阅地图的perldoc,它解释了这一点,并给出了一些解决办法。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21032709

复制
相关文章
Python 的 map 函数也可以处理多个参数的函数
比起 map 带给程序员的理解负担,大多数 Python 程序员更喜欢列表推导来解决问题。
somenzz
2022/10/25
2.9K0
Python 的 map 函数也可以处理多个参数的函数
python的map()函数
第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。
狼啸风云
2019/08/31
1K0
Python的map函数
一 简介 Python 内置了很多非常有用的函数 比如map() ,reduce(),filter(),还有lambda。熟练应用这些函数可以在写python程序的时候构建精简的代码。本文先来了解map函数。 二 使用 用法
用户1278550
2018/08/09
8000
python: map函数
对 sequence 中的 item 依次执行 function(item),将 执行结果 组成一个 List 返回。
JNingWei
2018/09/28
1.3K0
Js map 函数
map() 方法返回一个由原数组中的每个元素调用一个指定方法后的返回值组成的新数组。
上山打老虎了
2022/06/14
8.1K0
python函数map
Apply function to every item of iterable and return a list of the results. If additional iterable arguments are passed, function must take that many arguments and is applied to the items from all iterables in parallel. If one iterable is shorter than another it is assumed to be extended withNoneitems. If function isNone, the identity function is assumed; if there are multiple arguments, map() returns a list consisting of tuples containing the corresponding items from all iterables (a kind of transpose operation). The iterable arguments may be a sequence or any iterable object; the result is always a list.
py3study
2020/01/13
6240
Python map()函数
MapReduce: Simplified Data Processing on Large Clusters Jeffrey Dean and Sanjay Ghemawat https://research.google.com/archive/mapreduce.html 这篇来自谷歌的论文介绍了map/reduce,摘录如下: Abstract MapReduce is a programming model and an associated implementation for
Steve Wang
2018/02/05
8960
[759]python map函数
第一个参数接受一个函数名,后面的参数接受一个或多个可迭代的序列,返回的是一个集合。
周小董
2020/02/17
7570
python map函数
截至到目前为止,其实我们已经接触了不少的python内置函数,而map函数也是其中之一,map函数是根据指定函数对指定序列做映射,在开发中使用map函数也是有效提高程序运行效率的办法之一.
猿说编程[Python和C]
2020/03/02
8400
python map函数
Python Map 函数
map()是一个 Python 内建函数,它允许你不需要使用循环就可以编写简洁的代码。
雪梦科技
2020/07/14
8310
Python Map 函数
python中的map()函数
1.对可迭代函数'iterable'中的每一个元素应用‘function’方法,将结果作为list返回。 例:
py3study
2020/01/02
1.1K0
js map函数的用法
map()方法只能应用于数组遍历。如果想要遍历对象,可将对象转化为数组对象再其进行遍历。 var arr = [1,2,3,4]; //item,index,arr 分别为:当前元素的值(必填),当前元素的索引值,当前元素属于的数组对象 //最终在不改变原有数组值的情况下将原来数组循环一遍,处理好数据,返回一个新数组。 var arr1 = arr.map((item,index,arr) => { console.log("--"); console.log(item);//当前元素值 consol
潜心专研的小张同学
2023/01/03
8.4K0
js map函数的用法
filter函数和map函数
filter()函数接收一个函数 f 和一个可迭代对象,这个函数 f 的作用是对每个元素进行判断,返回 True或 False,filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的filter对象(一个迭代器)。
用户1214487
2022/03/26
5350
Python中map函数
1.对可迭代函数'iterable'中的每一个元素应用‘function’方法,将结果作为list返回。
学到老
2019/02/14
1.2K0
Python中map函数
python中的map()函数 map(function, iterable, ...) 1.对可迭代函数'iterable'中的每一个元素应用‘function’方法,将结果作为list返回。 >> def add100(x): ... return x+100 ... >>> hh = [11,22,33] >>> map(add100,hh) [111, 122, 133]  如果是python 3见上一篇博客。 2、如果给出了额外的可迭代参数,则对每个可迭代参数中的元素‘并行’的应
学到老
2018/03/16
1.1K0
python之map函数
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/156128.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/08
3960
【Groovy】map 集合 ( map 集合定义 | 通过 getClass 函数获取 map 集合的类型 | 代码示例 )
声明键值对 , 其中 键 Key 可以 不使用引号 , 可以 使用单引号 ‘’ , 也可以 使用双引号 “” ;
韩曙亮
2023/03/30
1.6K0
【Groovy】map 集合 ( map 集合定义 | 通过 getClass 函数获取 map 集合的类型 | 代码示例 )
Java中HttpServletRequest请求参数转Map工具类/接收HttpServletRequest请求参数转Map
public class MapDataUtil { public static Map<String, Object> convertDataMap(HttpServletRequest request) { Map<String, String[]> properties = request.getParameterMap(); Map<String, Object> returnMap = new HashMap<String, Object>();
目的地-Destination
2023/03/06
1.4K0
Python的range和map函数
函数式编程(Functional programming)是一种编程范式,目前没有统一的定义。对于并发编程有广泛应用。Python中,range,map,filter,zip等属于函数式编程。
fem178
2021/08/20
1K0
js中map函数的应用
这个callback一共可以接收三个参数,其中第一个参数代表当前被处理的元素,而第二个参数代表该元素的索引。
IT工作者
2022/01/24
5.6K0

相似问题

Perl Map函数

20

Perl:函数的参数不够

13

perl的map函数与面向对象的perl

30

Perl Map函数未按预期工作

30

bash:“map”函数参数?

30
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文