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

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

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

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

Q&A

解決済

2回答

811閲覧

perl の foreachで導き出した値を、foreach{}の外で使いたい場合

wkbiz

総合スコア150

Perl

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

0グッド

0クリップ

投稿2018/04/16 16:09

よろしくお願いします。

環境: perl v5.22.1, os=ubuntu16.04.4 LTS

foreach $data(@list){
my $hensu = $data."_suffix";
}

とした場合、foreach{}内で処理した値を、foreach{}の外で使いたい場合
どのように書けばよいのか、ご教授願えないでしょうか。

上記の場合だと$hensuはforeach{}のスコープでしか使えないと思いますが、
そもそも論、perlのforeachは連番出力などprint ...や三項演算子などを
使う場合だけでしか使わない、又は使ってはいけないもの、なのでしょうか?

配列のmax要素数を計って、for文で回せばいいのかもしれませんが、
foreachの性格を知っておきたく、また可能なら処理したものを外で使えるものなら
手段をしっておきたく質問させていただきました。

以上、よろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

my $hensu = ''; foreach my $data (@list){ $hensu = $data."_suffix"; }

のように、変数をスコープの外に出します。

投稿2018/04/16 16:21

編集2018/04/16 16:27
nnahito

総合スコア2004

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

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

0

ベストアンサー

何か微妙に勘違いがあるようです。perlのforとforeachには本質的な違いはありません。たとえば次の4行はすべて同じように機能します。

perl

1foreach $i (0..10){print "$i\n"} 2for $i (0..10){print "$i\n"} 3foreach($i=0; $i<=10; $i++){print "$i\n"} 4for($i=0; $i<=10; $i++){print "$i\n"}

$hensuへのアクセスはそこにforeachがあるから可能になるとかならないとかいう話ではありません。ブロックとスコープの問題です。言い方を変えるとfor/foreachよりも{}の存在が重要です。
次のスクリプトは、ブロックだけを使ってスコープのありようを試験してみた例です。

perl

1#!/usr/bin/perl 2 3my $i=1; 4my $j=2; 5{ 6 my $j=10; #myをつけているので、この$jは外の$jとは別物 7 my $k=20; 8 $i++; # この$iは外で定義されている$i 9 print "in: i=$i\n"; 10 print "in: j=$j\n"; 11 print "in: k=$k\n"; 12} 13print "out: i=$i\n"; 14print "out: j=$j\n"; 15print "out: k=$k\n";

実行結果はこうなります。

in: i=2 in: j=10 in: k=20 out: i=2  ←ブロック内での演算結果が外でも反映されている out: j=2  ←ブロック内での演算結果は外では関係ない out: k= ←$kはブロック内でmy定義されているのでブロックの外には存在しない(未定義)

投稿2018/04/16 17:24

KojiDoi

総合スコア13669

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

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

wkbiz

2018/04/17 01:24

ご教授ありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問