
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を探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
何がいけないのでしょうか?
-
__DATA__ が上書きされてしまう
-
入れ子ループで、外側のループ...
-
ソートを利用して文字を昇順で...
-
お勧めのデバッグツールは?
-
Perlの基礎中の基礎を教え...
-
Perl・正規表現が分かりません
-
EUCで保存されたスクリプトにて...
-
Pythonのプログラミング(Tkinter)
-
Application.ScreenUpdating = ...
-
文字の横にプルダウンを表示さ...
-
@×× = $q->param('**'); の書...
-
VB6で、長い時間かかる処理...
-
ファイルに書き込む
-
perlの型と8進数、10進数
-
JSONで文字列が長い時
-
FindFirst を複数条件で検索
-
{ ; }とは、どういう意味?
-
プルダウンメニューの幅
-
Perlで日付を取得する
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Perlで複数の値を返す良い方法...
-
プロトタイプ宣言のワーニング...
-
Pythonのプログラミングの質問...
-
LISPで連想配列の操作?
-
PERLの「!=」と「=~」 or...
-
print <<"_HTML_"の中でサブル...
-
Perlで自分自身の関数名を知る...
-
検索機能の作成で困っています
-
Pythonのマルチプロセスでの並...
-
CGI初心者です
-
Perlの書き方について
-
PerlでCabochaを呼び出すには(...
-
Perl 一定時間後にプログラムを...
-
繰り返し文における小数の挙動
-
Perl上でのMySQL文について
-
perlでtelnetクライアント
-
CLispのloop内の挙動について
-
threads を使ったマルチスレッ...
-
Perlですが、redoの処理がいま...
-
なんで?
おすすめ情報