Процедура Perl Sub для получения квадрата числа - PullRequest
0 голосов
/ 26 ноября 2018

Я пытаюсь написать подпрограмму, чтобы продемонстрировать получение подпрограммы числа как функции в Perl.Я понятия не имею, как использовать оператор @_ в Perl

#!/usr/bin/perl
use strict ;
use warnings ;
my $number = $ARGV[0] ;
if (not defined $number) {
        die " I need a number to multiply" }

    sub square {
        my $number = shift ;
        print "$number\n"
        return $number * $number ;
}

my $result = square() ;
print "$result";

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018

Вы не передаете $number своему сабвуферу.Попробуйте это:

#!/usr/bin/perl

use strict ;
use warnings ;

my $number = $ARGV[0] ;

die "I need a number to multiply" unless(defined $number);

sub square {
    my $number = shift ;
    print "$number\n";
    return $number * $number;
}

my $result = square($number);
print "$result\n";
0 голосов
/ 26 ноября 2018

Ваша подпрограмма ожидает число в качестве первого аргумента.Вы получаете доступ к аргументу, когда делаете:

my $number = shift;

Что на самом деле примерно эквивалентно:

my ($number) = @_;

Итак, как вы можете видеть, @_ - это специальная переменная, которая представляет списокАргументы, которые были переданы подпрограмме.

Проблема в вашем коде состоит в том, что вы не передаете аргумент своей подпрограмме.Это:

my $result = square();

Должно быть записано как:

my $result = square($number);
...