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のエラー
-
10個の実数に対する降順ソート...
-
データの値の近いものをグルー...
-
途中経過も表示するプログラム
-
C言語でのLinuxとwindows共通の...
-
TCP/IP通信の送信データについて
-
エクセルシート名の制限を変更...
-
PerlのCGIで全角スペースを入れて
-
CGIについてです。教えて下さい...
-
ピクセル,dpiから容量(バイト...
-
10Mバイトて文字数に すると何...
-
ワイド文字のバイト数が取得で...
-
chompの使い方
-
UCS-2の一覧表が欲しい
-
VBAでUnicodeしか存在しない文...
-
segmentation fault
-
char str[256]の256の意味は?
-
半角、全角の判別方法
-
VAX浮動小数点形式
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ポインター引数の関数でコンパ...
-
stable diffusionのエラー
-
printfの%eで指数部分の桁数を...
-
【Excel VBA】10進数を2進数に...
-
int型(2バイト)データの分割
-
pythonでDBのカラム名で取得し...
-
エクセルVBA:日付データの変換...
-
C#でのswitch文
-
linuxのシェルでファイル名に先...
-
C言語の構造体にてバブルソート...
-
c言語での wavファイルの編集(...
-
'dataType' 引数を Null にする...
-
H8/36064を使ったシリアル通信...
-
オセロゲーム 2次元配列で困...
-
10個の実数に対する降順ソート...
-
c言語の多次元配列で1から100ま...
-
c言語 配列から数字だけをint型...
-
matlabのソースコードをpython...
-
Cのプログラムがどうしても動き...
-
テキストファイルの結合について
おすすめ情報