A 回答 (11件中1~10件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
> my $A = 4,2,3;
この書き方だと $A には4だけが入ります。
試しに print $A してみてください。
初心者なら本なり、Webサイトなりで勉強していると思いますが、
配列の使い方は書いてないのですか?
あと、いきなりsumなんて書いてもそんなサブルーチンは存在しないので動作しませんよ。
sumは定義されていませんみたいなエラーでませんでした?
サブルーチンsumを自分で作るか、標準モジュールのList::Utilに入っているsumを使うとかしましょう。
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.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.5
- 回答日時:
組み込み関数じゃないですからねぇ
もうめんどくさいからエクセルだけやっといたらいいんじゃないですか?
他のプログラミング言語でもやってればその書き方はないんでしょうけどねぇ
ma-splitでも使って下さい。
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.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.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.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
お探しの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ランキング
-
CLispのloop内の挙動について
-
ハノイの塔の問題で困っており...
-
Perlで複数の値を返す良い方法...
-
[perl] next と return 同じ意...
-
Net::Telnetでタイムアウト時間...
-
変数に値を代入するのに、まずu...
-
dieやPerl自体でエラーが発生し...
-
HASH(0xほげほげ)
-
Application.ScreenUpdating = ...
-
JSONで文字列が長い時
-
formで特定のinputを送信しない...
-
16進の10進変換について
-
実行時エラー 3020の対策
-
[python] 文字列を変数名として...
-
<SELECT>タグの折り返し
-
文字のカラーとフォントの指定...
-
パイソンのクラスのブログラム
-
同じものを繰り返し表示させる
-
複数列を持ったリストボックス...
-
子windowsからsubmit()後にclos...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Perlで複数の値を返す良い方法...
-
HASH(0xほげほげ)
-
プロトタイプ宣言のワーニング...
-
Pythonのプログラミングの質問...
-
Net::SSH::Perlについて
-
perlのスクリプトどこが間違っ...
-
print <<"_HTML_"の中でサブル...
-
内部処理形式が日付型 (Date) ...
-
Perlで use strict して our変数
-
変数に値を代入するのに、まずu...
-
Perlで足し算をするには
-
連想配列とforeach
-
Perl:計算誤差について
-
icmp socket error
-
Perlで自分自身の関数名を知る...
-
PERLの「!=」と「=~」 or...
-
[perl] next と return 同じ意...
-
for文の中でのforeachの問題
-
PerlでCabochaを呼び出すには(...
-
Net::Telnetでタイムアウト時間...
おすすめ情報