List::Util - 减少 - 长度 - 编码 - 问题

2023-12-23

为什么第一个reduce 示例得到错误的结果?

test.txt

__BE  
bb bbbbbbbbbbbbbbb  

aaaaaa  

test.pl

#!/usr/bin/env perl
use warnings; use 5.012;
use open ':encoding(UTF-8)';
use List::Util qw(reduce);
use Encode;

my( @list, $longest, $len );
open my $fh, '<', 'test.txt' or die $!;
    while( my $line = readline( $fh ) ) {
    chomp $line;
    push @list, split( /\s+/, $line );
    }
close $fh;

$longest = reduce{ length($a) > length($b) ? $a : $b } @list;
$len = length $longest;
say $longest; # aaaaaa
say $len;     # 6

$longest = reduce{ length(Encode::encode_utf8($a)) > length(Encode::encode_utf8($b)) ? $a : $b } @list;
$len = length(Encode::encode_utf8($longest));
say $longest;  # bbbbbbbbbbbbbbb
say $len;     # 15

$longest = $list[0];
$len = length $longest;
for my $str (@list) {
    if ( length($str) > $len ) {
        $longest = $str;
        $len = length($str);
    }
}
say $longest; # bbbbbbbbbbbbbbb
say $len;     # 15

AFAICS,它甚至可能是 Perl 中的一个错误......它的行为是否正确当然并不明显。我修改了第一个减少以打印诊断:

#!/usr/bin/env perl
use warnings; use 5.012;
use open ':encoding(UTF-8)';
use List::Util qw(reduce);
use Encode;

my( @list, $longest, $len );
open my $fh, '<', 'test.txt' or die $!;
    while( my $line = readline( $fh ) ) {
    chomp $line;
    push @list, split( /\s+/, $line );
    }
close $fh;

$longest = reduce { say "<<$a>>/<<$b>> : ", length($a), " : ", length($b);
                    length($a) > length($b) ? $a : $b } @list;
$len = length $longest;
say $longest; # aaaaaa
say $len;     # 6

$longest = reduce { length(Encode::encode_utf8($a)) > length(Encode::encode_utf8($b)) ? $a : $b } @list;
$len = length(Encode::encode_utf8($longest));
say $longest;  # bbbbbbbbbbbbbbb
say $len;     # 15

$longest = $list[0];
$len = length $longest;
for my $str (@list) {
    if ( length($str) > $len ) {
        $longest = $str;
        $len = length($str);
    }
}
say $longest; # bbbbbbbbbbbbbbb
say $len;     # 15

当使用 Perl 5.13.4 在 MacOS X (10.6.5) 上运行时,我得到的输出是:

<<>>/<<__BE>> : 0 : 4
<<__BE>>/<<>> : 0 : 0
<<>>/<<bb>> : 0 : 2
<<bb>>/<<bbbbbbbbbbbbbbb>> : 0 : 15
<<bbbbbbbbbbbbbbb>>/<<>> : 0 : 0
<<>>/<<aaaaaa>> : 0 : 6
aaaaaa
6
bbbbbbbbbbbbbbb
15
bbbbbbbbbbbbbbb
15

从所有情况来看,第一个reduce的第一个参数始终是零长度字符串,即使在它包含一些数据的奇怪情况下也是如此。

If the 'use open ':encoding(UTF-8)';' 行被删除,然后它的行为就正常了。

<<>>/<<__BE>> : 0 : 4
<<__BE>>/<<>> : 4 : 0
<<__BE>>/<<bb>> : 4 : 2
<<__BE>>/<<bbbbbbbbbbbbbbb>> : 4 : 15
<<bbbbbbbbbbbbbbb>>/<<>> : 15 : 0
<<bbbbbbbbbbbbbbb>>/<<aaaaaa>> : 15 : 6
bbbbbbbbbbbbbbb
15
bbbbbbbbbbbbbbb
15
bbbbbbbbbbbbbbb
15

这可能表明该错误存在于文件 I/O、UTF-8 编码和 List::Util 交互中的某个位置。另一方面,它可能在更隐蔽的地方。但我的印象是,您有一个可重现的测试用例,并且可以在 Perl 及其核心模块中的某个位置报告为可能的错误。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

List::Util - 减少 - 长度 - 编码 - 问题 的相关文章

  • 无法在 Mac 上安装 DBD::mysql

    第一次发帖 格式可能不太对 请见谅 我一直在尝试使用 cpan 在 macOS Catalina 上安装 DBD mysql 但尚未成功 我使用了perlbrew 并尝试了mysql和mariaDB 但仍然没有成功 另外 我在网上研究了不同
  • Dart 中的 DoubleLinkedQueue 和 ListQueue 有什么区别?

    Dart 核心 API 有两个类实现Queue
  • perlbrew 可以在 Windows 上运行吗?

    使用 ActiveState 5 8 8Windows XP http en wikipedia org wiki Windows XP 我想安装更新的 Perl 进行测试 迁移 有一天 我们将不再以为自己只能使用一台计算机 当我想测试这类
  • 从字符串数组中删除项目

    我有一个包含如下数据的数据库字段 76 60 12 例如 如果我想删除60 我该怎么办 要删除的号码可以是任何地方 如果需要的话 我还需要删除逗号 我正在使用 NET 2 0 我会用逗号分割字符串 删除元素 然后再次连接字符串 希望这一切都
  • 根据前 2 个元素从嵌套列表中删除重复项

    仅当前两个元素相同时 我才尝试从嵌套列表中删除重复项 而忽略第三个元素 List L el1 el2 value1 el3 el4 value2 el1 el2 value2 el1 el5 value3 将返回 L el3 el4 val
  • Perl LWP::简单 HTTPS 错误

    我正在尝试获取网站的内容并打印 该代码按照我希望的方式在常规 HTTP 网站上运行 但它不适用于 HTTPS 我已经查找了此问题的修复程序 但它们在我的程序中不起作用 这是我目前拥有的代码 usr bin perl use strict u
  • 真实设备中的 Android strace

    我有以下情况 我想监控Android手机上的系统调用 所以 我编写了一个脚本来做到这一点 使用 Android 模拟器可以完美地工作 将应用程序的痕迹写入我的 Ubuntu 上的特定文件中 问题是当我连接一个真实的手机来分析它时 它在结果文
  • 生成字符串及其子字符串列表的排列的算法

    我已经忘记这个算法有一段时间了 假设我得到了字符串 cccaatt 我试图生成重复字母的每个子串的所有可能变体 EG cccaatt 作为输入将返回 猫 卡特 猫 卡特 ccat 卡特 卡特彼勒 卡特彼勒 cccat cccat cccaa
  • Perl Moose TypeDecorator 错误。我该如何调试?

    我最近遇到了一个问题 非常感谢您的见解 我在圣诞节前在 PerlMonks 上发布了类似的问题 并提供了一些从 MooseX Declare 切换的反馈 http www perlmonks org node id 877703 1 我现在
  • Perl - 以相反的顺序逐行读取文件[重复]

    这个问题在这里已经有答案了 可能的重复 如何在 Perl 中从文件末尾读取行 https stackoverflow com questions 303053 how can i read lines from the end of fil
  • Python中的Url解码UTF-8

    在 Python 2 7 中 给定一个类似的 URLexample com title D0 BF D1 80 D0 B0 D0 B2 D0 BE D0 B2 D0 B0 D1 8F D0 B7 D0 B0 D1 89 D0 B8 D1 8
  • Rails 3、mysql/mysql2 将某些检索到的字符串误解为 ASCII-8BIT

    这个问题最初是常见的 字符编码不兼容 ASCII 8BIT 和 UTF 8 问题 但事实是not我在问什么 相反 我发现发生此问题是因为数据库的某些字段在检索时被标记为 ASCII 8BIT 而大多数字段正确显示为 UTF 8 例如 在包含
  • Perl 中如何释放内存?

    我的代码如下所示 my var my var new while 1 while my k v each var a sub v var A map var var new keys var new var new B sub a sub
  • 如何在没有循环的情况下初始化哈希中的值?

    我正在尝试找出一种无需经过循环即可初始化哈希的方法 我希望使用切片来实现这一点 但它似乎没有产生预期的结果 考虑以下代码 usr bin perl use Data Dumper my hash hash currency symbol B
  • 如何在正则表达式中匹配“/*”?

    stuff d learning perl tmp txt open STUFF stuff or die Cannot open stuff for read while
  • LISP 非常简单的列表问题

    我正在学习 lisp 而且我对此还很陌生 所以我想知道 如果我这样做 defparameter list 1 list 1 2 defparameter list 2 list 2 3 defparameter list 3 append
  • 在 python 中高效、快速地迭代元组列表中超过 3600 万个项目

    首先 在任何人将其标记为重复之前 请阅读以下内容 我不确定迭代的延迟是否是由于尺寸巨大或我的逻辑造成的 我有一个必须迭代的用例3600 万件商品在元组列表中 我的主要要求是速度和效率 样本清单 how are you I am fine h
  • 将 for 循环转换为列表理解

    我有一个for循环 将字符串列表中每个元素的子字符串与另一个字符串列表中的元素进行比较 mylist for x in list1 mat False for y in list2 if x 14 in y mat True if not
  • 如何使用append/3在prolog中递归构建列表?

    我需要了解一些事实的价值 这部分似乎正在发挥作用 fact1 A Val1 fact2 B Val2 A B 但是一旦我尝试附加这些值 Val1 Val2 通过使用append 3谓词到列表 OutList 我只得到一个可能的解决方案 而不
  • 更改使用文本文件的 SSIS 日志提供程序创建的文件的文件编码

    我是 SSIS 新手 我已经设计了一个包并为文本文件配置了 SSIS 日志提供程序 这工作正常并且日志文件已成功生成 我们有一个监控团队 他们使用这个日志文件进行监控 他们无法读取日志文件 因为文件编码是 Unicode 格式 他们期望使用

随机推荐

  • h:commandButton 在 h:dataTable 中不起作用

    我正在尝试执行action通过commandButton里面一个dataTable 但是action当commandButton放置在数据表内 如下所示
  • 传递一个简单的 IEnumerable 来查看并使用 foreach 循环会返回空白屏幕?

    我有一个简单的客户模型类列表 我将其传递到我的视图 我想迭代客户类 但我的观点是告诉我通过返回空白屏幕来结束 请告诉我这里出了什么问题 型号类别 public class Customer public string CustomerNam
  • ASCII 艺术图像转换算法如何工作? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 有一些不错的免费 图像到 ASCII 艺术 转换网站 如下所示 ASCII art org http www ascii art or
  • Laravel 有没有办法执行 .SQL 文件来加载数据

    我有历史数据想要加载到新数据库中 我可以通过运行 MySQL 命令来做到这一点 但我有兴趣知道是否有artisan命令来做到这一点 没有办法使用以下方式导入开箱即用的数据库转储artisan 但是 您可以创建自定义artisan命令 php
  • 什么场景调用fs.close是必要的

    我在nodejs API中找不到更多关于fs close的解释 我想知道什么场景下调用fs close是必要的 例如 var fs require fs fs writeFile home a tex abc or like fs appe
  • codeigniter 2.1.4 支持http方法自定义路由吗?

    我知道 codeigniter 支持自定义路由到另一个类 方法 例如 route product any catalog product lookup 但是 它是否支持基于调用 url 的 http 请求类型的路由 如 laravel 中那
  • Android Facebook 获取所有个人资料信息

    我如何从 Facebook 获取所有用户个人资料信息 如名字 姓氏 电子邮件等 我已经下载了FB SDK https github com facebook facebook android sdk但没有获取个人资料信息的示例 文件夹 fa
  • 如何用另一个 numpy 数组填充 numpy 数组

    我有一个空的 numpy 数组 另一个填充了值 我想用填充的数组填充空的 numpy 数组 x 次 因此 当 x 3 时 最初为空数组 看起来像 populated array populated array populated array
  • 如何使 ActionBar 上的项目分别为左、中、右各一个?

    我在用着actionbarsherlock去做吧 我想要在操作栏中显示的示例 登录 公司徽标 过滤器 我在操作栏中得到的示例 登录 公司徽标 过滤器 我在 res menu 中创建了登录按钮 公司徽标和过滤按钮 以可绘制的形式 activi
  • Django + uwsgi + nginx 重定向到默认页面“欢迎来到 NGINX”

    我是 python 和 django 的初学者 不过 我正在尝试创建一个服务器来部署我的应用程序 但是当我想访问我的应用程序时 我总是得到默认的 nginx 页面 欢迎使用 nginx 该服务器运行 Ubuntu 12 04 精确 我已经使
  • 将 switch 语句案例分组在一起?

    我可能忽略了一些东西 但是 C 中有没有一种简单的方法可以将案例分组在一起 而不是将它们单独写出来 我记得基本我可以这样做 SELECT CASE Answer CASE 1 2 3 4 C 示例 对于需要的人 include
  • 网络日期的国际化

    有人有任何好的日期国际化 架构 吗 就像英语中的it Monday 中文 Monday 荷兰语 maandag 日语 月曜日 所以我的第一个想法是创建某种类 以 59 种不同的语言存储周一到周日的字符串 显然这根本不可扩展 想象一下现在我需
  • 将实体关系模型扩展到表(子类)

    在 EER 模型中存在子类实体 我想知道在真正的 SQL 表中实现这一点的方法是什么 或者是否有任何指南可以帮助我了解如何将实体子类实现到有帮助的表中 谢谢 马丁 福勒的书企业应用架构模式 http www martinfowler com
  • 从经过身份验证的路由获取图像

    我有一个正在运行的图像上传前端 后端代码 现在我希望能够在上传后从服务器获取图像 问题是图像必须位于经过身份验证的路由后面 用户必须在标头或正文中传递 jwt 令牌 当我尝试像这样获取图像时 fetch imageURL method GE
  • hidpi 显示上的 Android 模拟器?

    我在安装了 KDE Neon 的笔记本电脑上运行 android 模拟器 26 1 3 KDE Neon 是基于 Ubuntu 16 04 和最新 KDE 的发行版 我的笔记本电脑的屏幕分辨率是 14 3840X2160 物理 DPI 31
  • Woocommerce 和 Opayo:向发送到 API 的数据添加自定义字段

    非常具体的问题 但是 我在我们的 Wordpress Woocommerce 网站上遇到了我们公司支付网关的问题 我们在该网站上使用 Opayo 插件 适用于 Opayo Direct 问题是 最初设置时 没有选择模板 选项Referenc
  • 使用Java Apache PoolingClientConnectionManager泄漏内存,如何解决?

    我的网络应用程序在晚上运行作业 并遇到问题 它使用了大量内存 我用命令来查找哪个函数占用了java资源 其结果是 tomcat uhzd006525 jstack 2365 grep 93f A 30 parking to wait for
  • 如何在Python中将元组作为参数传递?

    假设我想要一个元组列表 这是我的第一个想法 li li append 3 three 结果是 Traceback most recent call last File foo py line 12 in
  • 为什么在满时将阵列容量加倍是常见的做法?

    我注意到实现动态数组是很常见的 尤其是在面试问题和家庭作业中 通常 我看到的问题是这样表述的 实现一个数组 其中doubles满时容量 或者非常相似的东西 他们几乎总是 根据我的经验 使用这个词double明确地 而不是更笼统地 实现一个数
  • List::Util - 减少 - 长度 - 编码 - 问题

    为什么第一个reduce 示例得到错误的结果 test txt BE bb bbbbbbbbbbbbbbb aaaaaa test pl usr bin env perl use warnings use 5 012 use open en