【问题标题】:What should If I want to check whether my union is list or string in perl如果我想检查我的联合是 perl 中的列表还是字符串,该怎么办
【发布时间】:2017-12-09 18:42:53
【问题描述】:

我需要用Perl写一个联合函数,我做的是这里,问题后面是代码。

sub union
{
    my @array1  = qw/a b c d/;
    my @array2  = qw/a f g h/;
    my %myunion = ();
    @myunion{ @array1, @array2 } = (1) x ( @array1 + @array2 );
    @myunion = keys %myunion;
    return @myunion;

    #if(){
    #    return @myunion;
    #}
    #else{
    #    return join ',', @myunion;
    #}
}
my @uString = union( [ 1, 2, 3 ], [ 2, 3, 4 ] );
my @uList   = union( [ 1, 2, 3 ], [ 2, 3, 4 ] );
print "$uString\n" 
print "@uList\n";

因此,如果没有我的命令部分,我的输出是随机顺序的 a b c d f g h,但我想让它们随机顺序为 1 2 3 4,就像我在 @uList 中写的输入一样。另外我需要检查调用者是否需要一个列表,如果是,它将以随机顺序返回 1 2 3 4,否则,它将返回一个以逗号分隔的联合字符串,该字符串应该是随机的 1,2,3,4命令。所以想知道if else语句的条件部分应该怎么做。

【问题讨论】:

  • 你在寻找wantarray函数吗?
  • 如果你想让输出反映参数的内容,那么你必须使用传递的值而不是硬编码的数组@array1@array2
  • 我正在写一个使用哈希的函数
  • $uString@uString 是不同的变量。此外,您的潜艇不会读取参数。
  • @nicken:可以更新你的问题吗?

标签: perl perl-module


【解决方案1】:

使用@_ 变量检索子程序参数。

要创建哈希键,您可以让值未定义。

#! /usr/bin/perl
use warnings;
use strict;

sub union {
    my ($aref1, $aref2) = @_;
    my %union;
    @union{ @$aref1, @$aref2 } = ();
    return keys %union
}

my @union = union([1, 2, 3], [2, 3, 4]);
print "@union\n";

my $union = join ',', union([1, 2, 3], [2, 3, 4]);
print "$union\n";

【讨论】:

  • 那么如果我调用$uString 和@uList,它会显示不同的答案,正如我之前提到的,如果我调用uString 它会显示1,2,3,4 如果我调用uList 它会显示 1 2 3 4,一个带逗号,一个不带
  • @nicken,我对答案进行了更改,显示了当你想要的时候如何获得1,2,3,4
  • @ikegami 我知道那样,但如果我调用我的 $uString = union([1,2,3],[2,3,4]);然后它将返回 1,2,3,4 ,所以我认为我需要 if else 语句来检查它调用的是字符串还是列表。
  • @nicken:当我执行$uString = union(...) 时,我得到的是元素的数量,而不是1,2,3,4。这就是 keys 在标量上下文中返回的内容。
  • @choroba,OP 询问如何编写union,因此其结果基于上下文。
猜你喜欢
  • 2021-07-16
  • 2022-07-25
  • 2017-08-16
  • 1970-01-01
  • 1970-01-01
  • 2015-09-07
  • 1970-01-01
  • 2022-01-17
  • 1970-01-01
相关资源
最近更新 更多