入門本に、次のような例題がありました(主要部分の抜粋です)。

@list = (20,25,24,32,28,20,28,24,20); #年齢リスト
foreach $fld(@list){
  $syukei{$fld}++;
}
print "<table><tr><th>年齢</th><th>人数</th></tr>\n";
foreach $key( reverse( sort( keys( %syukei ) ) ) ){
  $cnt = $syukei{$key};
  print"<tr><th>${key}才</th><th>${cnt}人</th></tr></table>\n";

これの実行結果は、@list の年齢を各年齢ごとにカウントして、表に各年齢が何人であるかを表示します。

・$syukei{$fld}++; の部分は $ハッシュ名{'キー名'} でハッシュを作ろうとしているのだと思うのですが、++ がなぜ付くのか分かりません。
・↑の考え方が合っているとしたら、$cnt = $syukei{$key} で右辺は $ハッシュ名{'キー名'} を表しているのだと思うのですが、左辺がスカラー値を求めている場合はキーの数を返すというルールがあるのでしょうか?

私の質問にこだわらず、分かりやすく全体の説明をして頂ければ助かります。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

手ごわいですね。

敢えて説明に挑戦してみます。

どうも、ハッシュの概念またはハッシュの記法の
理解が間違っておられるように見受けられますが。

ハッシュって要はExcel(じゃなくてもいいですが)の
表みたいなもんで、表の左端の列に書かれてる内容で
行を特定する、というイメージです。

回答者   回答日
deagle   01-09-07
zeyper   01-09-07
Fooky   01-09-09

という表があったとします。表の名前はAnsDateとでも
しましょうか。ハッシュでは、回答日を取り出すのに、
回答者の名前を使って取り出せる、ということです。
ですから、print $AnsDate{'Fooky'}; の実行結果は
01-09-09となります。このときの回答者名が
「ハッシュキー」、回答日が「ハッシュ値」となります。
表全体が「ハッシュテーブル」、各行が「ハッシュ」と
呼ばれます。

1つ、Excelの表と違うところは、同じ回答者名を持った
行(=同じハッシュキーを持つ異なるハッシュ値)はつくれない、
ということです。ですから、ここで新たに全く同じハンドル
ネームのFookyって人が、10日に回答をしてしまうと、
$AnsDate{'Fooky'} = '01-09-10';という代入が為され、
先程の表は

回答者   回答日
deagle   01-09-07
zeyper   01-09-07
Fooky   01-09-10

となってしまいます。

一方、普通の配列は、何行目かを指定することで
データを取り出す表、というイメージになります。
ですから、先程の表は、

番号  回答日
0   01-09-07
1   01-09-07
2   01-09-09

となり、0番目の回答者が何日だったかなぁってことで、
print $AnsDate[0];として、01-09-07を取り出します。

ちょっと難しく考えすぎではないですか?
要素番号でしか参照できない配列が、
もうちょっと使いやすくなって、要素番号の
ところに任意の文字列が使えるようになった
だけのことなんですが。

さて、例題のforeachのところを展開してみると、

$syukei{'20'}++;
$syukei{'25'}++;
$syukei{'24'}++;
....
$syukei{'28'}++;
$syukei{'24'}++;
$syukei{'20'}++;

という処理が順に行われているだけです。

ここで新たに問題になるのは、$syukei{'20'}という
のは初めて出て来たので、文字列'20'をキーとする
ハッシュはまだ存在しない(=まだ表の左端に20
と書かれた行が存在しない)ということです。

まだ存在しないハッシュ値に対して、1増やす、
という算術演算を施したらどうなるのか?

答えは、'20'をキーとして、ハッシュ値が'0'である
ハッシュが自動的に作成され、それに1増やす
という処理が行われます。

そうすると、最終的に、

$syukei{'20'} == 3, $syukei{'25'} == 1, $syukei{'24'} == 2,
$syukei{'32'} == 1, $syukei{'28'} == 2

という結果になるのは、不思議ではないと思うんですが。

しつこいようですが、この結果を表として書くと、

年齢   人数
20    3
25    1
24    2
32    1
28    2

という表になります。

例題の後半は、年齢の大きいものから順に表示される
ように工夫しているだけです。
    • good
    • 0
この回答へのお礼

ありがとうございます!ゆっくり考えて、大方理解できました。
私が分かってなかったのは、$syukei{$fld}++; の加算がどの時点行われるか、ということです。私は $fld の値(年齢の数値)に加算されるものだと勘違いしていました。
Fookyさんのおっしゃる「存在しない値に1を加算する」という概念がなかったんです。

foreach $fld(@list){
  $syukei{$fld}++;
の時点で、目には見えないけどハッシュテーブルを作ってるんだと理解すれば、$syukei{$fld}++; の指し示す行へ1が加算されるのも分かります。

その後の
foreach $key( reverse( sort( keys( %syukei ) ) ) ){
  $cnt = $syukei{$key};
も、それで理解できました。

お礼日時:2001/09/10 10:28

初めまして、私も最近勉強を始めたものです。



まず、ハッシュとは
aaa-bbb0-ccc0
  -bbb1-ccc1
  -bbb2-ccc2
と言う感じになっていてこれは、%aaaというハッシュになります。
%aaaのbbb0の中に、ccc0と言う値が入っているわけです。
ちなみにこれが@aaaだと、bbb0は数字0、bbb1は数字1でccc0がその値となります。
ですから、ハッシュとは、値(ccc)を入れるだけでなく、その値の入っているキー(bbb)も決められる、配列(@)のパワーアップ版みたいなものだと思ってください。
余計に分からなくなったらすいません。

ハッシュが分かったところで(分からなくても(笑))上のプログラムは、
syukei-20-3
   -24-2
   -25-1
   -28-2
-32-1
と言うハッシュになります。++は下の専門家の言った通りだと(下を読んで初めて知った)数字を1足す、"$***++"と同じ効果があると言うことなので、
syukei-20-
と初めて20を出したら++で
syukei-20-1
とし、もう一度20を出したら++で、
syukei-20-2
として、それを最後に
$cnt = $syukei{$key};
で$cntに値を入れているというわけです。ちなみにこの時$keyが20だと
3 = $syukei{20};
となります。

こんな雑な説明でわかっていただけたら幸いです。
最後にこの時
$abc = @list;
とやると$abcには9が入ります。
配列をスカラー変数に入れると、配列の中のリストの数を返します。
$ハッシュ名{'キー名'} はキー名の中のスカラー変数を表しているので、$***の中にはスカラー変数を返しているだけです。
    • good
    • 0
この回答へのお礼

ありがとうございます。しかし、
foreach $fld(@list){
  $syukei{$fld}++;
}
の部分は $fld に @list の要素を一通り代入しなさい、という命令ですよね?
それがなぜ @list の各要素をキーとして代入し、その登場回数を値として代入するのかが分かりません。
配列をスカラー変数に入れると、配列の中のリストの数を返すというのは分かりましたが、 「$ハッシュ名{'キー名'} はキー名の中のスカラー変数を表しているので、$***の中にはスカラー変数を返しているだけです。 」という説明が分かりません。

お礼日時:2001/09/07 20:58

 またまた登場(笑)


 えー。まずこのプログラムは、ハッシュ配列 syoukei に、年齢をキーとしてその人数を入れ、逆順ソートした上で出力する、というものですね。
 ちょっとばかしHTMLの組み方がおかしいようですが(笑)

 で、ご質問の部分、の「++」は、これは単純に「カウントアップ」の意味です。
 $syoukei{$fld} には「$fld 歳」の人の人数が入っているわけですから、これにプラス1しているのです。これを、インクリメント機能と呼びます。
 このカウントアップ自体はハッシュに関する機能ではなく、すべての変数に対して使うことが出来ます。

 (すべての変数は未定義状態では0、null、undefine のいずれかであると定義されるので、最初のカウントアップの直後には変数の値は1になります)
 逆に $syoukei{$fld}--; とするとこれはカウントダウンで、マイナス1されます。

 ですので、$cnt = $syoukei{$fld} では、$cnt に単純に、カウントアップして得られた集計結果を代入しているだけということになります。
    • good
    • 0
この回答へのお礼

@list = (20,25,24,32,28,20,28,24,20); #年齢リスト
foreach $fld(@list){
  $syukei{$fld}++;
}
print "<table><tr><th>年齢</th><th>人数</th></tr>\n";
foreach $key( reverse( sort( keys( %syukei ) ) ) ){
  $cnt = $syukei{$key};
  print"<tr><th>${key}才</th><th>${cnt}人</th></tr></table>\n";

私の解釈では、
■foreach $fld(@list){ は、@listの要素を一通り$fldにする→従って $syukei{$fld} は $syukei{$20} など@listにある年齢を入れたもの9つを用意する→$syukei{$20}++ なんていう文は成り立たないのでは?

となって、止まってしまいます。

お礼日時:2001/09/07 21:17

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

Qリストのピアノ曲で…

リストのピアノ曲の中で比較的難易度の低いものを教えて下さい。
過去に弾いたことがあるのは、愛の夢・ため息のみです。
手は大きくなく、何とか9度届くくらいです。
宜しくお願いします。

Aベストアンサー

比較的難易度の低いものといっても、<ため息>を弾かれたなら、「忘れられたワルツ」や、あるいは、「巡礼の年」をぱらぱらとご覧になってみて、譜読みしたい(できそうな)ものを選ばれるというのはどうでしょうか?以下は、私自身が過去に譜読みしたもので、それほど無体でなかった(爆)と思うものです。
お役に立てば良いのですが。

参考までに、無料のオンライン楽譜サイトURL添付しておきますね。
(信頼おけるところなので、クリックしても大丈夫です(笑))

忘れられたワルツ(1番は比較的聞かれる機会もあるかと)
<http://imslp.org/wiki/Valses_Oubli%C3%A9es,_S.215_%28Liszt,_Franz%29>
巡礼の年(第1年:4番は美しい曲です)
<http://imslp.org/wiki/Ann%C3%A9es_de_P%C3%A8lerinage:_1%C3%A8re_Ann%C3%A9e:_Suisse,_S.160_%28Liszt,_Franz%29>
巡礼の年(第2年イタリア:「ダンテを読んで」は難しいですけど、1番、3番、あるいはペトラルカのソネット104番などは練習すれば何とか…と思わせるものがあります)
<http://imslp.org/wiki/Ann%C3%A9es_de_P%C3%A8lerinage:_2%C3%A8me_Ann%C3%A9e:_Italie,_S.161_%28Liszt,_Franz%29>

比較的難易度の低いものといっても、<ため息>を弾かれたなら、「忘れられたワルツ」や、あるいは、「巡礼の年」をぱらぱらとご覧になってみて、譜読みしたい(できそうな)ものを選ばれるというのはどうでしょうか?以下は、私自身が過去に譜読みしたもので、それほど無体でなかった(爆)と思うものです。
お役に立てば良いのですが。

参考までに、無料のオンライン楽譜サイトURL添付しておきますね。
(信頼おけるところなので、クリックしても大丈夫です(笑))

忘れられたワルツ(1番は比較的聞か...続きを読む

Qif($key){ ($key eq 'aaa') || ~~を複数縦に記述したい

sub AAA {my($key)=@_;
if($key){
($key eq "aaa") || ($key eq "bbb") || ($key eq "ccc") || ($key eq "ddd") || &Error("$keyが不正です。");
}
}

のような形があるとして、$key eq "" の数が50個近くあるような場合、横に表示するのではなく縦に
($key eq "aaa") ||
($key eq "bbb") ||
($key eq "ccc") ||
($key eq "ddd") ||
と、見栄えよく表示させたいのですが
どのように記述すればよいのでしょうか。

また代替案などありましたらあわせてご教授頂けますと幸いです。

Aベストアンサー

正規表現で

$key =~ /^(
aaa|
bbb|
ccc|
ddd)$/x || &Error("$keyが不正です。");

Q情報少ないですが、是非リストのピアノ曲のタイトルを教えてください。

昔外国で聞いたコンサートで、リストのピアノ独奏曲があったのですが
タイトルが思い出せません。
ピアニスト本人が英語で”パ行の発音を発していたような。。
曲は長調、最初左手のみ?でレミ(それから下に下がって)ソラレ?といったような主題が流れます。最後の方にも同じものが再現部に現れ、終盤はドビッシーのアラベスクのようなアルペジオが流れます。曲はアンコールで弾かれたので長くなく5分程度、全体的に大変美しい曲ですが、珍しいものではないかと思います。

間違いない情報としましては。。
フランツ リストであること
愛の夢やため息、コンソレーション3番、軽やかさといった、有名な曲ではない事
(二つの伝説や、メフィストワルツ、マゼッパでもありませんでした)
図書館とCDショップであたってみるつもりですが、曲を探そうにもタイトルが分かりません。。
リストにお詳しい方など、是非教えてください。

Aベストアンサー

自信は無いですが、巡礼の年 (Annees de Pelerinage)、第二年、イタリア、から第一曲目の「婚礼」(Sposalizio)ではないかなとふと思いました。聴いてみてくださいな。

このCDの一曲目。視聴できます。
http://www.amazon.com/Liszt-Piano-Works-Annees-Pelerinage/dp/B00000E2MO/ref=sr_1_3/102-6333279-0771332?ie=UTF8&s=music&qid=1177292401&sr=8-3

またはこのCDの二曲目。
http://www.amazon.com/Liszt-Paralipom%C3%A8nes-Franz/dp/B00000AE0E/ref=sr_1_5/102-6333279-0771332?ie=UTF8&s=music&qid=1177292627&sr=1-5

Q$hts =~ s/##([^#]+)##/$FORM{$1}/g の意味を教えてください!

お世話になります。
perl素人なのですが必要に迫られてWEBで調べながら
ソースを解析していますが、次のコードで完全に止まってしまいました。

$hts =~ s/##([^#]+)##/$FORM{$1}/g

この場合、
#hts から ##([^#]+)## を探して $FORM{$1} に全て置き換えようとしていると思うのですが、以下2点が理解できず困っています。

1.##([^#]+)## の意味
$htsに##で囲まれた文字列が複数あるのでそれら全てを探すということでしょうか?

2.$FORM{$1} の意味
$1は1.で検索した結果だと思いますが、$FORM{ }は一体なんでしょうか?

素人がいきなり解析するのは無謀なのは承知の上ですが、
どうしても業務で必要なので、お知恵をお貸し下さい。
よろしくお願いいたします。

Aベストアンサー

1.
perlを基準に「正規表現」で調べてごらん

2.
同じくperlでHTMLのformデータを受け取る方法を調べてごらん

Qショパンとリストの合作であるピアノ曲はあるのでしょうか

ピアノの楽譜を見ていて(確か全音の楽譜だったと思います)、作曲家がショパン=リストとなっている曲が1曲あったように記憶しています。
その曲名は思い出せないのですが、その曲は偉大な作曲家であるフレデリック・ショパンとフランツ・リストの両名による合作なのでしょうか。まあ同世代の人間ですし交流もあったようですから合作の曲があってもおかしくないと思いますが。

そして合作だとしたら、その曲が生まれた経緯はわかりますでしょうか。20年ほど前に桑田佳祐とMr.Childrenによる合作の「奇跡の地球」という歌がありましたが、そのようなコラボレーションプロジェクトだったのではないかと思うのですが、どうでしょう。

Aベストアンサー

今は洋楽では大人数の共作、共演、featureといったことが当たり前に多くなされています(そういう手段の普及度は日本とは比較にならないです)が、西洋クラシックの時代に人気作曲家が合作といったことは割と少ないと思いますよ。
まず自分の知る限りでは、この頃の作曲家は非常に作家性や自我の強い人達であり、今のロックバンドなんかと異なりピアノに向かって黙々と1人で創作することに慣れていて、共同で1つの作品を創作するなんてとても出来そうにないことと、宗教音楽の時代と異なり著作物の権利問題に既に厳しくなっていて、「共作」という権利問題の扱いがまだまだ成熟していなかったこと、等が挙げられると思います。実際、作家の間で使用許可を得たとか得ないとかパクっただとかの訴訟問題は当時からよく起こっていたようです。

ただ、作曲(ピアノ版や、ピアノ譜のスケッチ等)は1人の人が担い、後々編曲版を別の人が作るといったことは多かったようです。
実際、ドビュッシーは無名のサティを世に出す手助けをする為にジムノペディを管弦楽アレンジしていますし、ラヴェルはドビュッシーの管弦楽曲のピアノ版、もしくはピアノ曲の管弦楽版を編曲したりしています。言うまでもなくこれらは同時代を生きた作曲家達です。
上のように、既にある有名曲を後々別の有名作家が編曲するということは多いですが、人気作家で忙しかったドビュッシーは、管弦楽曲のスケッチを自ら作曲して、友人であり作曲家であったにカプレにおおまかな指示だけしてオーケストレーションを任せる等のことも度々しています。これは共作とは言えるかもしれませんが、どちらかというと「分業」もしくはカプレは「アシスタント」ですし、「作曲家」は完全にドビュッシーとなりますよね。

ということで、「ショパン=リスト」となっていたら、自分ならなんとなく「リストが後々編曲したのかな」と思います。詳しいことは知らないので憶測でそう思うってだけですけどね。参考までに。

今は洋楽では大人数の共作、共演、featureといったことが当たり前に多くなされています(そういう手段の普及度は日本とは比較にならないです)が、西洋クラシックの時代に人気作曲家が合作といったことは割と少ないと思いますよ。
まず自分の知る限りでは、この頃の作曲家は非常に作家性や自我の強い人達であり、今のロックバンドなんかと異なりピアノに向かって黙々と1人で創作することに慣れていて、共同で1つの作品を創作するなんてとても出来そうにないことと、宗教音楽の時代と異なり著作物の権利問題に既...続きを読む

Q$in{'~'}を$~に変換

CGIを改造中です。
変数の処理なのですが、サブルーチン内で利用するときに「$in{'~'}」と言う形でしか表示してくれません。これを「$~」の形にしたいです。
数が少なければ「$~ = $in{'~'}」を個数書けばいいのでしょうけど、結構数があるので、何か簡単な方法で変換できないかと考えています。
良い方法があれば教えてください。

Aベストアンサー

ハッシュのままで何か不都合があるのかなと
疑問に思いつつ・・・
#実際ハッシュは
#「(変数の)値に別の値を対応させる」
#ために存在するわけだから

けど,まあ,やろうと思えばkeys関数でできますよ.

%in=(
'X' => 1,
'Y' => 2,
'Z' => 3,
);

for $key (keys %in){
${$key}=$in{"$key"};
print "key; $key ${$key}\n";
}

print "$X $Y $Z";

strictとwarningsのプラグマを外さないといけないので
副作用の方が大きいでしょうが.

Qショパン,リスト,ラフマニノフのピアノ曲オススメ

こんにちは。

ピアノに関してはまったくのど素人のクラシック音楽愛好家です。
ベタな質問で恐縮ですが,作曲家自身が名ピアニストでもあった三名様(ショパン,リスト,ラフマニノフ)のピアノ独奏曲または四手のための作品のオススメをご教示いただけましたら幸いです。

【お願い事項】
 ・作曲家お一人様それぞれ数作品程度をめどに
  (傑作がたくさんあって絞るのは大変かと思いますが)
 ・三名のうちのどなたかだけ,もちろん一曲だけのオススメでもOK
 ・聴きやすい,親しみやすい曲想でなくてもOK
 ・曲の長短は不問
 ・一般的な世評をご教示いただいてもいいですし,個人的好みでもOK
 ・お気に入りのCDアルバムでご紹介いただいてもOK
 ・私の好みは無視していただいてOK(えっ,そんなの知ったこっちゃない?^^;)

なお,これらは勝手なお願いですので,作品数の縛りも含め,ご自由にご回答いただいてももちろん結構です。


では,よろしくお願いいたします♪

Aベストアンサー

意外なご質問ですね。
私の好みは無視していただいてOK…とのことですので,
マニアックなものではなく,オーソドックスなもので考えてみました。

リスト
http://www.hmv.co.jp/product/detail.asp?sku=237633

迷った結果(迷うほど多くは知らないのですが),ひとつに絞るならこれにしました。
ユーザーレビュー 2007年10月04日の方のコメント通り,
Un sospiro「ため息」と,La leggerezza「軽やかさ」の印刷ミスがあります。
「12の超絶技巧練習曲」や,ラ・カンパネラでお馴染みの「パガニーニによる大練習曲」,
よく聴く機会があるので演奏される頻度が高いのではと思う「森のざわめき」など,
有名なものは満載の2枚組です。お勧めの低価格盤です。
ハンガリー狂詩曲はオーケストラでご存知のものがあるでしょうし,
こちらの方がいいのではと思いました。
「巡礼の年」は大人の香りがする通好みで,質問者様にぴったりかもしれないと迷いましたが,
それは後のお楽しみにということで,まずは上記のもの絞りました。


ラフマニノフ
http://www.hmv.co.jp/product/detail/853252

安いものばかり上手に買っています。
幻想小品集 作品3-1『エレジー』は私のお気に入りです。
もう少し演奏のテンポが速いといいのですが。(私好みでは)
楽興の時 4番 ホ短調 作品16-4はショパンの「革命」からの影響かな?…と思います。
演奏は別のCDでも,『エレジー』が入っているものがお勧めです。
lib08に試聴があります。
http://piano1001.com/lib_0_frame.htm


ショパン
一番迷ったので最後になりました。
ノクターン,バラード,スケルツォ,ソナタ,ワルツ……,どれもいい!,どうしましょう。
迷いに迷って,やっぱり,ノクターン!
お気に入りの演奏があったのですが残念ながら廃盤になっていました。
http://www.hmv.co.jp/product/detail/742515

悪口は禁句かもしれませんが,ポリーニとワイセンベルクにはがっかりしました。
全曲は聴いていませんが,キーシンの演奏にはグッときました。
でも,これも残念ながらノクターン全曲のCDがなさそうです。
というわけで,演奏者のお勧めは分かりませんが,遺作を含む21番まで入っているものを
お選びください。映画「戦場のピアニスト」で使われた20番 嬰ハ短調 遺作は特に好きです。
下記,動画の試聴でどうぞ。ノクターン第20番 「遺作」(ルイ・レーリンク)
http://www.piano.or.jp/enc/dictionary/composer/chopin/000448.html

意外なご質問ですね。
私の好みは無視していただいてOK…とのことですので,
マニアックなものではなく,オーソドックスなもので考えてみました。

リスト
http://www.hmv.co.jp/product/detail.asp?sku=237633

迷った結果(迷うほど多くは知らないのですが),ひとつに絞るならこれにしました。
ユーザーレビュー 2007年10月04日の方のコメント通り,
Un sospiro「ため息」と,La leggerezza「軽やかさ」の印刷ミスがあります。
「12の超絶技巧練習曲」や,ラ・カンパネラでお馴染みの「パガニーニに...続きを読む

Q変数 $abc と ${abc}

$abcを
${abc}と書くのはなぜですか
よろしくお願いします。

Aベストアンサー

正確なところは知らないのですが、
{}で囲むと変数名を明確にすることができます。
$abc = "123";
の時、$abc . "456"のつもりで
print "$abc456";
とすると、変数abc456の内容が出力されます。
一方、print "${abc}456";
とすると、上手く行きます。

Qショパン・リストでオススメのピアノ曲のCDを教えて下さい

ショパンやリストの、エチュード系のCDを探しています。

『エチュード全集』や『ハンガリー狂詩曲全集』など、出来たら選曲集ではなく、全集が好ましいです。

演奏家については、殆ど無知ですので、有名な方を教えていただければと思います。



どうぞ宜しくお願い致します。

Aベストアンサー

◇ショパンの練習曲はポリーニをお勧めします。
http://www.hmv.co.jp/product/detail/851768

ポリーニは好みに合わなくて何度もがっかりさせられましたが,
この1枚は別でした。目が覚めるような鮮やかな演奏です。
一番,お勧めしたいのはホロヴィッツですが,
残念ながら,練習曲集,ワルツ集のように,まとまった形では
C Dが出ていません。演奏は素晴らしいです。
http://www.hmv.co.jp/Product/detail.asp?sku=1818508

◇リスト ハンガリー狂詩曲全集
 ピサロ
http://www.hmv.co.jp/product/detail.asp?sku=1460034

使用楽器がブリュートナーということで珍しい録音かと思います。
楽器の特性が表れていると思いますが,豊かな響きの好録音です。
演奏は都会的というか,この曲集でよく聴く「こてこて」した感じがなく,
品の良いハンガリー狂詩曲です。

ブリュートナーの説明
http://d.hatena.ne.jp/keyword/%A5%D6%A5%EA%A5%E5%A1%BC%A5%C8%A5%CA%A1%BC


◇リスト 練習曲集
 リスト弾きの饗宴ということで複数のピアニストです。
http://www.hmv.co.jp/product/detail.asp?sku=237633

ガンガンと力が入った演奏は何度も繰り返し聴いていると疲れを感じ,飽きてきますが,
この曲集は,全体に力んだ演奏はなく,良いと思います。
この値で,この内容はお買い得かと思います。

>演奏家については、殆ど無知ですので、有名な方を教えていただければと思います。
商業ベースに乗るのが下手で,あまり名は売れていないけれど,
たいへん優れたピアニストもいますので,「有名な方」は
あまり気にしなくていいと思います。
一部の音楽評論家の意見で,「ショパン弾き」とか「リスト弾き」と
レッテルが貼られますが,それも一種の商業ベースによるものです。

◇ショパンの練習曲はポリーニをお勧めします。
http://www.hmv.co.jp/product/detail/851768

ポリーニは好みに合わなくて何度もがっかりさせられましたが,
この1枚は別でした。目が覚めるような鮮やかな演奏です。
一番,お勧めしたいのはホロヴィッツですが,
残念ながら,練習曲集,ワルツ集のように,まとまった形では
C Dが出ていません。演奏は素晴らしいです。
http://www.hmv.co.jp/Product/detail.asp?sku=1818508

◇リスト ハンガリー狂詩曲全集
 ピサロ
http://www.hmv.co.jp/produc...続きを読む

Qwhile(<ハンドラ>) {} で行数をカウント

こんにちは。

掲示板をperlで作るという課題に取り組んでいるのですが、下記の部分の
動きだけがどうしても期待する動作がえられず、困っています。
なにか試した方が良い事がありましたら、ご指摘いただけないでしょうか。

プログラムの説明:
POST されたコメントを data.dat に追記していくプログラムです。
ファイルハンドラから一行づつ読み込んで、行数を $count でカウントし、
『X行目&&コメント』のようにコメントの先頭に行数を表示します。


#!/usr/bin/perl
$myfile = 'data.dat';

(省略)

sub piyo{
open(HOGE, ">> $myfile");
flock(HOGE, 2);
my $count = 1;
while(<HOGE>){
$count++;
};
print HOGE "$count行目&&in{'comment'}\n";
close(HOGE);

};


data.dat の期待する結果は下記です。

1行目&&コメント
2行目&&コメント
3行目&&コメント
.....

実際に data.dat に書き込まれた結果は下記でした。

1行目&&コメント
1行目&&コメント
1行目&&コメント
.....


試した事1:
open(HOGE, ">> $myfile");

open(HOGE, "+>> $myfile");
した。

試した事2:
while(<HOGE>){
$count = $count + 1;
};
とした。


どちらでも結果に違いがありませんでした。


よろしくお願いします。

こんにちは。

掲示板をperlで作るという課題に取り組んでいるのですが、下記の部分の
動きだけがどうしても期待する動作がえられず、困っています。
なにか試した方が良い事がありましたら、ご指摘いただけないでしょうか。

プログラムの説明:
POST されたコメントを data.dat に追記していくプログラムです。
ファイルハンドラから一行づつ読み込んで、行数を $count でカウントし、
『X行目&&コメント』のようにコメントの先頭に行数を表示します。


#!/usr/bin/perl
$myfile = 'data.dat';

(省略)

sub pi...続きを読む

Aベストアンサー

+>>をご使用なので、ファイルハンドラが最後に移動してないでしょうか。
ハンドラが最後に移動しているので、whileは実行されておらず、常にファイル末尾に1行目が出力されるというシナリオを想像します。

Perlfaqを使用して…

$lines = 0;
$filename = "yahho.txt";
open(FILE, "+<$filename") or die "Can't open `$filename': $!"; #open に+<を使用
while (sysread FILE, $buffer, 4096) {
$lines += ($buffer =~ tr/\n//);
print "p";
}
print FILE ++$lines . "やっほ~\n";

注意 open時にファイルの存在は保証してください。存在しない場合エラーです。


人気Q&Aランキング