GUCIと申します。
ループ変数の変更は、元の値を変えてしまうのでしたっけ?
元を変えずに変更したい場合に、
my $data_tmp = $data;
$data_tmp =~ s/^0+//;
としないといけないなんて。
らくだ本読んでも解りませんでした。
どなたか、解説お願いします。
C:\>type T1.pl
#!Perl
use strict;
my @data = qw(001 002 003);
print "S1: data is @data\n";
for my $data (@data) {
$data =~ s/^0+//;
}
print "S2: data is @data\n";
__END__
C:\>T1.pl
S1: data is 001 002 003
S2: data is 1 2 3
No.1ベストアンサー
- 回答日時:
>ループ変数の変更は、元の値を変えてしまうのでしたっけ?
です。
>どなたか、解説お願いします。
らくだ本にどう書かれていたか知りませんが(忘れた)、
要は値がコピーされてるんじゃなくて別名がついてるだけなので、
別名の方をいじっても本体に影響が出ると云うことです。
If any element of LIST is an lvalue, you can modify it by modifying VAR
inside the loop. Conversely, if any element of LIST is NOT an lvalue,
any attempt to modify that element will fail. In other words, the
"foreach" loop index variable is an implicit alias for each item in the
list that you're looping over.
perlsyn
有り難う御座います。
myしてるから、大丈夫って思ってました。
すると、元データを変えずに、ループ変数を加工して
何か処理したい場合って、解りますか?
for your $data (@data) {
とか、無いですよね。(^_^)ゞ
No.3
- 回答日時:
どういった処理をしたいのにかもよりますが、今回の例で言えば
このようなやり方もあります。
#!/usr/bin/perl
# -*- coding: utf8 -*
use strict;
use warnings;
use Fatal qw(:void open close);
use feature ':5.10';
my @data = qw(001 002 003);
say "S1: data is @data";
say "S2: data is ", join($", map {$_+0} @data);
=begin
for my $data (@data) {
$data =~ s/^0+//;
}
=cut
say "S3: data is @data";
結果:
S1: data is 001 002 003
S2: data is 1 2 3
S3: data is 001 002 003
S3での結果を見ると分かるとおり、元データは変わってません。
No.2
- 回答日時:
>すると、元データを変えずに、ループ変数を加工して
>何か処理したい場合って、解りますか?
それがコピーでしょう?
コピーするのがいやなら
(理由はまったく分からないけど),
localで変更をスコープの中に押し込める。
いや,myされた変数はローカルできないから,
myせずにごまかすとか・・・
use strict;
my @data = qw(001 002 003);
print "S1: data is @data\n";
{no strict "vars";
for $data (@data) {
local $data;
$data =~ s/^0+//;
}
}
print "S2: data is @data\n";
__END__
・・・いやなコードだと思う.
コピーするのがいやなら,参照渡しの
サブルーチンの引数も
コピーせずにやっちゃってる?
・・・ですか。
やっぱり、
for your $data (@data) {
じゃないかと。
my より、さらに刹那的な形容詞ってないかしら。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- その他(プログラミング・Web制作) pythonでDBのカラム名で取得したオブジェクトの値を表示したい 1 2022/05/13 03:41
- C言語・C++・C# pythonのファイルの並びでの読み込みとリストについて 4 2022/04/13 03:52
- Visual Basic(VBA) vbaのループ処理について 6 2022/05/06 15:35
- その他(プログラミング・Web制作) Python - Excel で Webからデータを連続取得したいのですが エラーが出ます 1 2023/07/06 20:08
- その他(Microsoft Office) Excel 2列分のDATAの並べ替え 1 2023/01/01 17:12
- PDF ハイパーリンク先の一括変更について 2 2022/03/23 08:13
- Excel(エクセル) SUMIFSと日付変換 10 2023/04/16 15:38
- C言語・C++・C# プログラミングの問題です。写真のプログラムの1から10を下のように入力しましたがプログラムが上手くい 3 2022/07/01 23:31
- その他(プログラミング・Web制作) np.stack()とnp.array()の違い 4 2022/05/01 00:00
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ポインター引数の関数でコンパ...
-
stable diffusionのエラー
-
Cのプログラムがどうしても動き...
-
プロシージャ名の変数にカウン...
-
c言語での wavファイルの編集(...
-
【Excel VBA】10進数を2進数に...
-
平滑化フィルタ
-
OrderTEXT
-
オブジェクトのメモリイメージ...
-
掲示板CGIで新着順ではなく古い...
-
matlabでのRRI検出
-
excelマクロを用いてのファイル...
-
お直しお願いいたします
-
FFTがうまくできない
-
C言語 ファイル内のデータと入...
-
10Mバイトて文字数に すると何...
-
ビットスワップとバイトスワッ...
-
Excel 1セル当りの文字数が2...
-
機種依存文字の変換について
-
リトルエンディアンのデータを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ポインター引数の関数でコンパ...
-
stable diffusionのエラー
-
printfの%eで指数部分の桁数を...
-
エクセルVBA:日付データの変換...
-
int型(2バイト)データの分割
-
c言語の多次元配列で1から100ま...
-
C#でのswitch文
-
【Excel VBA】10進数を2進数に...
-
途中経過も表示するプログラム
-
CreateProcessでの環境変数の設...
-
pythonでDBのカラム名で取得し...
-
C言語についてです! 同じ年の...
-
linuxのシェルでファイル名に先...
-
c言語 配列から数字だけをint型...
-
c言語での wavファイルの編集(...
-
matlabのソースコードをpython...
-
ビットデータのチェック方法
-
10個の実数に対する降順ソート...
-
python 気象データの取得
-
PINVOKEで構造体配列をマーシャ...
おすすめ情報