
A 回答 (11件中1~10件)
- 最新から表示
- 回答順に表示
No.11
- 回答日時:
普通は、my @array = (4, 2 ,3);と書きます。
my $A = "4,2,3";、と書くなら
my @array = split(',', $A);
としてからsumできなくもないけれど、
それなら最初から配列変数使えってことになるでしょう。
No.10
- 回答日時:
活発な回答があったので、どなたががフォローするんじゃないかと静観しておりましたが・・・
> $Aにはいろいろな数字が100以上の数字入ります。
perlの変数$Aに100以上だろうが以下だろうが許された範囲の数値なら何入れても勝手ですが
$A=4,2,3;
みたいに「複数」の「データ」を「一つのデータしか入らない変数」に入れたいと切に願っても言語仕様上、願った結果にはなりません。
お願いするだけでプログラムが動くんだったら世のプログラマの存在ってなんなのかと・・・。
たまたま文法エラーにはならないかもしれませんが「ひとつの箱にはひとつのものしか入らない」のです。
裏技的な手法を使うのではない限り、普通に「複数の入れ物」か「配列変数」を用意するべきではないかと思います。
> ここでは簡単に4+2+3で試していましたが、実際は123 だったり、34だったり、その不特定数値が100以上続きます。
指摘されている問題点は100とか200とか「量」の問題ではなくプログラム言語仕様に対する理解です。
> $A自体の足し算を目標にしております。
一個のデータの足し算という概念が理解できません。
たぶん、$Aのなかに不特定多数のデータが入っているという前提で考えているのでしょうけれど、その前提自体が間違っているのです。
まずは入門書や解説サイトなどを参考にされることをおすすめします。
ポイント部分のURLを張っておきますので参考URLをご参照ください。
参考URL:http://www.tohoho-web.com/wwwperl1.htm#Scalar
No.9
- 回答日時:
あ, 気付いたので指摘しとこっと.
#6 の最後,
print (4+2+3)."\n";
もアウトだ. これは
(print (4+2+3))."\n";
と解釈されるので改行の意味がない.
もっとかっこを付けて
print ((4+2+3)."\n");
としないとダメ.
この回答への補足
返事が遅れましたが、つけくわえると目標は、$Aにはいろいろな数字が100以上の数字入ります。ここでは簡単に4+2+3で試していましたが、実際は123 だったり、34だったり、その不特定数値が100以上続きます。なので、$A自体の足し算を目標にしております。どうぞよろしくお願いいたします。
補足日時:2012/11/05 14:55No.7
- 回答日時:
他の人も書かれているんですが, このような書き方をどこで見たのかが非常に疑問.
以下は余談:
my $A = 4,2,3;
は
(my $A = 4), 2, 3;
という解釈になるはずです>#3. my を使うときに
my $a, $b;
なんていう失敗はよくやらかしますし (この場合 $a にのみ my がかかる),
my( ($A=4),2,3) ;
と解釈しても 2 や 3 に my を適用する意味がない.
あと, 最初の奴は $n に「前回の結果」が残るので sum を複数回呼び出すとアウトです>#6. unpack を使うやつ以外は, (自分ではやらんけど) 意味は分かる.
No.6
- 回答日時:
たびたびすいません。
回答とはいえませんが面白い参考サイトがあったのでおまけで変態チックな実例をいくつか
まぁ、こうも書けると言うperlの醍醐味っていうやつです。
---------------------------------
#!/usr/bin/perl
my @A=(4,2,3);
my $B = sum(@A);
print $B."\n";
exit;
sub sum{
$n += $_ for @_;
return $n;
}
---------------------------------
#!/usr/bin/perl
my @A=(4,2,3);
my $B = sum(@A);
print $B."\n";
exit;
sub sum{ return eval join "+", @_; }
---------------------------------
#!/usr/bin/perl
my @A=(4,2,3);
my $B = sum(@A);
print $B."\n";
exit;
sub sum{ return length join "", map 1 x $_, @_; }
---------------------------------
#!/usr/bin/perl
my @A=(4,2,3);
my $B = sum(@A);
print $B."\n";
exit;
sub sum{ return unpack "%W*", join "", map chr, @_; }
---------------------------------
#!/usr/bin/perl
my @A=(4,2,3);
my $B = sum(@A);
print $B."\n";
exit;
sub sum{ return unpack("%32d*", pack "d*", @_); }
---------------------------------
1番目以降はなにがなにやら、ほとんど変態的ですね。
でもベストは「ANo.1」さんの示した
---------------------------------
#!/usr/bin/perl
print (4+2+3)."\n";
exit;
---------------------------------
が一番合理的でしょう。
参考URL:http://kawa.at.webry.info/201106/article_1.html
No.5
- 回答日時:
組み込み関数じゃないですからねぇ
もうめんどくさいからエクセルだけやっといたらいいんじゃないですか?
他のプログラミング言語でもやってればその書き方はないんでしょうけどねぇ
ma-splitでも使って下さい。
No.4
- 回答日時:
> うまくいきません。
> 何が悪いのかわかる方教えてください。
perl言語ルールを無視してるあなたが一番悪いのは明白です。
そのリストのままでは新しく別の仕様の言語処理系を作るしか、表示が「9」になることはないでしょう。
ルールにのっとってあなたの示したリストに近いものを書けば
---------------------------------
#!/usr/bin/perl
my @A=(4,2,3);
my $B = sum(@A);
print $B."\n";
exit;
sub sum{
my $n = 0;
foreach(@_){ $n += $_; }
return $n;
}
---------------------------------
こんな感じになるんじゃないかな?
No.3
- 回答日時:
・$A=4になっている
この文は
my( ($A=4),2,3) ;
と解釈されます。
Perlではよく括弧を省略しています。それを補って考える必要があります。
・上記の状態を確認せずにリストとして使おうとしている
print $Aとか、print $A[0] とかすれば、少なくとも期待通りではないことが確認できるはずです。
・sum,subsumなんて関数は(標準では)無い
・(出ているはずの)エラーメッセージを確認していない
Undefined subroutine &main::sum called at ~ line ~
ってエラーになりませんでしたか?
エラーになる、ということは間違えている。
「Undefined subroutine(定義されていないサブルーチン)」だから使おうとしたものが定義されていない=存在しない。
というのがこのエラーメッセージからだけでもわかるはずです。
熟練プログラマーでも、まずはエラーメッセージの確認から始めます。
それを初心者が怠っていればわかるはずがありません。
・マニュアルを確認していない
どんな環境でPerlを使っているかわかりませんが、大抵の場合、perldocという詳細なマニュアルがついています。
perldocコマンドが使えるなら、perldocコマンドで読めます。
Webでも読めます。 http://perldoc.perl.org/
一部日本語訳もあります。 http://perldoc.jp/
組込み関数は
perldoc perlfunc
http://perldoc.perl.org/index-functions.html
http://perldoc.jp/index/function
で確認できます。 sumやそれに類する関数が無いことがよくわかるはずです。
・プログラムは「思った通り」に動くものではない
「書いた通り」に動くものです。
Perlは比較的「思った通り」に動く方なのですが、それでも「思い」と「実際の動作」が一致しないことがよくあります。
No.2
- 回答日時:
> my $A = 4,2,3;
この書き方だと $A には4だけが入ります。
試しに print $A してみてください。
初心者なら本なり、Webサイトなりで勉強していると思いますが、
配列の使い方は書いてないのですか?
あと、いきなりsumなんて書いてもそんなサブルーチンは存在しないので動作しませんよ。
sumは定義されていませんみたいなエラーでませんでした?
サブルーチンsumを自分で作るか、標準モジュールのList::Utilに入っているsumを使うとかしましょう。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) awkのtoupper() 1 2022/10/21 20:39
- Perl perlでリテラル値はメモリにどのように格納されているか? 1 2023/01/15 20:45
- Google Drive スプレッドシートの時間(分、秒)の足し算SUM関数がうまくいきません。 3 2022/09/08 16:39
- Perl perlをバージョンアップしたら、今まで正常に動いていたプログラムが、エラーになってしまった 3 2022/10/05 15:44
- Perl Perlのエラーについてご教授ください。初心者です。 CGIを別サーバに移したところ、Perlのバー 5 2023/05/31 10:48
- Perl Windows10においての『Perl』のプログラムについて 1 2022/05/09 16:04
- Excel(エクセル) VBA SUM関数を入力したい 6 2022/08/20 20:10
- PHP PHP ページング データベース 1 2022/06/16 10:30
- Excel(エクセル) エクセルのSUM関数について 4 2023/04/18 10:37
- CGI -T(汚染モード)でメールが送れません 1 2022/06/12 14:11
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・【お題】甲子園での思い出の残し方
- ・【お題】動物のキャッチフレーズ
- ・人生で一番思い出に残ってる靴
- ・これ何て呼びますか Part2
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・あなたが好きな本屋さんを教えてください
- ・かっこよく答えてください!!
- ・一回も披露したことのない豆知識
- ・ショボ短歌会
- ・いちばん失敗した人決定戦
- ・性格悪い人が優勝
- ・最速怪談選手権
- ・限定しりとり
- ・性格いい人が優勝
- ・これ何て呼びますか
- ・チョコミントアイス
- ・単二電池
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・泣きながら食べたご飯の思い出
- ・一番好きなみそ汁の具材は?
- ・人生で一番お金がなかったとき
- ・カラオケの鉄板ソング
- ・自分用のお土産
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Perlで特定文字列から特定文字...
-
perl 初等プログラミングについて
-
Perlのエラーについてご教授く...
-
perlプログラミング 空白行削除
-
Windows10においての『Perl』の...
-
openした後、closeしないでプロ...
-
perlをバージョンアップしたら...
-
Perlでファイルの末尾から指定...
-
INDIRECT 横に再度抽出したい
-
テキストファイルで提出とは?
-
perl の open について教えてく...
-
アルファベットに付いて質問し...
-
#!/usr/bin/perlで書きだしたCG...
-
ファイルアイコンの左下に緑の□...
-
Perlで時間の計算
-
perlの構文でカンマの意味が分...
-
Blenderについて
-
Perl の外部モジュールの利用方法
-
Perlのプログラムについて
-
vlookupがうまくいきません、教...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Net::Telnetでタイムアウト時間...
-
プロトタイプ宣言のワーニング...
-
親ループのループ変数$_を子ル...
-
CGIから複数の別プログラムを同...
-
Perl上でのMySQL文について
-
三乗根
-
socket通信でレスポンスを受け...
-
Perl:CGI.pm:入力ボックスのク...
-
内部処理形式が日付型 (Date) ...
-
Perlで複数の値を返す良い方法...
-
select(ソケット)
-
Net::SSH::Perlについて
-
icmp socket error
-
dieやPerl自体でエラーが発生し...
-
CLispのloop内の挙動について
-
[perl] next と return 同じ意...
-
print <<"_HTML_"の中でサブル...
-
自作関数への値の渡し方@_
-
Telnetモジュールで繋がりません。
-
シェルでawkを使い行数を取り出...
おすすめ情報