質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

Q&A

解決済

1回答

383閲覧

Perl foreach 配列

mkn66

総合スコア41

Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

0グッド

0クリップ

投稿2022/06/15 07:54

Perl

1#!/usr/bin/perl 2#配列 = (購入する物の名前、値段、購入数) 3@A = ("Apple", 50, 8); 4@O = ("Orange", 30, 10); 5@B = ("Banana", 20, 12); 6@G = ("Grape", 100, 5); 7 8@max = @A; 9 10foreach @a (@O, @B, @G) { 11 if($max[1]*$max[2] < $a[1]*$a[2]){ 12 @max = @a; 13 } 14} 15 16$price = $max[1] * $max[2] 17print "名前: $max[0] 代金:$price" 18

上のプログラムは代金が一番高いものを見つけるプログラムをPerlで書いたつもりです。
しかし、@maxに@G(代金が一番高い)が代入できていません。
どうしてでしょうか?
foreachの@aは配列にとって変わることは出来ない仕様なのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

foreach @a (@O, @B, @G) はエラーになります(Missing $ on loop variable)。
なので、参照を使います。

perl

1#!/usr/bin/perl 2 3use strict; 4use warnings; 5 6#配列 = (購入する物の名前、値段、購入数) 7my @A = ("Apple", 50, 8); 8my @O = ("Orange", 30, 10); 9my @B = ("Banana", 20, 12); 10my @G = ("Grape", 100, 5); 11 12my @max = @A; 13foreach my $a (\@O, \@B, \@G) { 14 if($max[1]*$max[2] < $a->[1]*$a->[2]){ 15 @max = @$a; 16 } 17} 18 19my $price = $max[1] * $max[2]; 20print "名前: $max[0] 代金:$price"; 21 22# 23名前: Grape 代金:500

投稿2022/06/15 10:14

melian

総合スコア19618

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mkn66

2022/06/15 12:20

参照を使うのですね! ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問