トップページ⇒php
1001コメント332KB

【Perl】初心者コーナーPart9

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。01/12/28 23:21ID:SPLRvqQi
いらっしゃーい、Perlのコーディングで困ってる人のスレです。

1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。

1と3が無いと誰も答えられないよ、良い回答は良い質問から。
一緒に勉強しましょう。

参考書籍はこちら【【Perl,CGI】参考書籍 第2版 】
http://pc.2ch.net/test/read.cgi/php/988809842/
CGIの質問はこちら【CGIだけど、なんか質問ある?part5】
http://pc.2ch.net/test/read.cgi/php/1009331505/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般】
http://pc.2ch.net/test/read.cgi/php/991313362/

過去ログ、その他の役立ち情報は>>2-10を見よう。
0261aaa02/01/21 13:36ID:7eJzqhDP
Perl関連のほしい本があるんですが、その本が5.6対応では
ありませんでした。(elements programming with Perlです。)
5.5?やってから5.6本やってもおそくないですか?
あと、支障とかないですか?
0262茶文字 ◆xELvisFU 02/01/21 15:57ID:0ovwchs4
テキストファイルを読み込んで、1行目を<title>と<h1>に、2行目を<h2>にするようにしたいのです。

open FILE,"xxx.dat";
@page = split(/\n/,<FILE>);

print <<"EOH";
<html>
<head>
<title>$page[0]</title>
</head>
<body>
<h1>$page[0]</h1>
<h2>$page[1]</h2>
EOH

$count = 0;
foreach $i(@page){
if ($count > 1){
print $page[$i];
}
}
print "</body></html>";

close FILE;

2行目を$page[1]として<h2>に、3行目以降をforeachで順に出力するつもりで
以上のように書いたのですが、$page[2]以降を取得できないようです。
どこで勘違いしているのでしょうか?
0263名無しさん@お腹いっぱい。02/01/21 16:08ID:???
>262
>foreach $i(@page){
ここに問題がある。
この場合、$iには何が入るのかな?
俺は数字じゃないように思えるんだが。

>foreach $i(1 .. $#page){
との違いはわかるかな?
0264名無しさん@お腹いっぱい。02/01/21 16:09ID:???
>foreach $i(2 .. $#page){
こっちが正しいな。
修正する前に書き込んじまった、スマソ。

あともう一つ質問。
$countはずっと0のままでいいのかな?
数字が全然増えてないから、if文の中に入れないようにも見えるぞ。
026525102/01/21 16:14ID:???
>>252
URLをデコードするってどういうことでしょうか?
よくわからないのですが。
026625102/01/21 16:17ID:???
検索したらすぐ出てきました。迷惑かけてすいません。
逝ってきます。
0267茶文字 ◆xELvisFU 02/01/21 16:21ID:???
>>264
をっとスマソ
うまくいかないので別の方法で無理やり辻褄あわせてて、もとのスクリプトと
違うこと書いちゃいました。

$count++をforeachの最後に入れて、print $page[$count];にしてたはず・・・

うがー なんでこんなところにひっかかってんだ私;
0268名無しさん@お腹いっぱい。02/01/21 16:25ID:yxhIL91Y
>267

俺ならこんな感じ。チェックしてない。

open (FILE,"xxx.dat"); @page = (<FILE>); close (FILE);
$page[0] =~ s/\n//g;
$page[1] =~ s/\n//g;

print <<"EOH";
Content-type: text/html; charset=Shift_JIS

<html>
<head>
<title>$page[0]</title>
</head>
<body>
<h1>$page[0]</h1>
<h2>$page[1]</h2>
EOH

$count = @page;
for($i = 2;$i <= $count; ++$i) {
$$page[$i] =~ s/\n/<BR>\n/g;
print $page[$i];
}
print "</body></html>";
0269名無しさん@お腹いっぱい。02/01/21 16:26ID:yxhIL91Y
>268
ミス
>$$page[$i] =~ s/\n/<BR>\n/g;
$一個おおいっすスマソ
0270名無しさん@お腹いっぱい。02/01/21 16:28ID:???
>>260
print "Content-Type: text/plain\n\n";
print $ENV{QUERY_STRING}
とかやってデータを確認したら?
確認後のエンコード周りがあやしい。

>>261
5.6触ったこと無いが,
Perl5.6は仕様を足しただけみたいだから
Perl5やってからでも特に支障無いと思う。
0271茶文字 ◆xELvisFU 02/01/21 16:28ID:???
>>268
あ 何となくどこで勘違いしているのかわかったかも。
さっそく試して報告するです。
ありがとうございました。
0272 02/01/21 16:30ID:VXT1KPc/
shift @page;
foreach (@page){
print $_;
}
じゃいけんの?
$countってどこでインクリメントするの?
0273  02/01/21 16:36ID:rALZtRCf
print <<"EOH";
Content-type: text/html; charset=Shift_JIS

<html>
<head>
<title>$page[0]</title>
</head>
<body>
<h1>shift(@page)</h1>
<h2>shift(@page)</h2>
EOH

foreach (@page){
print $_;
}
具体的にはこうか?
0274 02/01/21 16:38ID:pTKsFCnA
あ、全然だめだ。スマソ。逝ってきます。
0275傍観者02/01/21 16:40ID:bIKApu3O
268完璧だと思うんだけど、文句いう奴いるんだよな
0276ほげ02/01/21 16:41ID:bIKApu3O
268でいいと思われ
0277茶文字 ◆xELvisFU 02/01/21 16:50ID:???
できました。
268は完璧でした。

>>272
$countがインクリメントしていないのは私の転記ミスです。
0278名無しさん@お腹いっぱい。02/01/21 16:52ID:???
>>275-276 = 268
名前変えてもID出てるぞ。
0279名無しさん@お腹いっぱい。02/01/21 16:53ID:???
>>275-276
TMTOWTDIってことで、色々出てくるのはいいんじゃねーの。
0280名無しさん@お腹いっぱい。02/01/21 16:55ID:???
>>273
おしい。
ヒアドキュメントの中では @{[shift @hoge]} のように使うと吉。
0281名無しさん@お腹いっぱい。02/01/21 17:00ID:yxhIL91Y
あ!、もう出来たんだね。
でも、せっかく作ってきたので書いちゃう。

どうしてもforeach使うんだったらこんな感じ。
やっぱしチェックしてない。

open (FILE,"xxx.dat"); @page = (<FILE>); close (FILE);
$page[0] =~ s/\n//g;
$page[1] =~ s/\n//g;

print <<"EOH";
Content-type: text/html; charset=Shift_JIS

<html>
<head>
<title>$page[0]</title>
</head>
<body>
<h1>$page[0]</h1>
<h2>$page[1]</h2>
EOH

$i = 0;
foreach (@page){
if ($i ne "0" && $i ne "1"){
$_ =~ s/\n/<BR>\n/g; print $_;
}
++$i;
}
print "</body></html>";
0282名無しさん@お腹いっぱい。02/01/21 17:01ID:yxhIL91Y
>278
お、おれ?
おれかよ!(笑)
0283 02/01/21 17:01ID:???
open (FILE,"xxx.dat");
@page = (<FILE>);
close (FILE);
$title = shift(@page);
$h2 = shift(@page);
print <<"EOH";
Content-type: text/html; charset=Shift_JIS

<html>
<head>
<title>$title</title>
</head>
<body>
<h1>$title</h1>
<h2>$h2</h2>
@page;
</body></html>
EOH
0284茶文字 ◆xELvisFU 02/01/21 17:11ID:???
みなさんありがとう。
それぞれのサンプルもきちんと見て勉強させてもらうです。
WebProg板サイコー(・∀・)イイ!
0285名無しさん@お腹いっぱい。02/01/21 17:14ID:???
>>282スマソ勘違い
ということで>>275-276はギャフンと言え
0286名無しさん@お腹いっぱい。02/01/21 17:19ID:???
改行をつけたい場合は2回目のshiftのあとに
@page = map {$_ . <BR>} @page;
だね。
0287 02/01/21 17:31ID:???
@page = map {$_ . "<BR>"} @page;
やろがぁ!
@page;のセミコロンはいらん。オケ?
0288名無しさん@お腹いっぱい。02/01/21 17:36ID:???
しょうもない質問だと途端に元気になるな
このスレの回答者は  (笑)
0289茶文字 ◆xELvisFU 02/01/21 17:40ID:???
>>288
しょうもない質問で悪かったな(w
0290aaa02/01/21 17:42ID:7eJzqhDP
>270 レスどもです。
0291名無しさん@お腹いっぱい。02/01/21 19:00ID:6X0/37gM
GUIで次のようなプログラムを書け、という問題が学校でだされました。
ちんぷんかんぷんです。しかもスレ違いの予感もしてます。ごめんなさい。

プログラムはグレー色のウィンドウで表すこと。
しかもユーザーに赤、青、緑から好きな色を選ばせられるようにすること。
なおかつ1度ではなく何度もユーザーにその色を何度も変える事ができるようにすること。

誰か教えてください。
0292名無しさん@お腹いっぱい。02/01/21 19:06ID:???
プラットフォームを書くこと。
0293名無しさん@お腹いっぱい。02/01/21 19:12ID:6X0/37gM
ほんとごめんなさい
プラットフォームとは何ですか・・・?
0294名無しさん@お腹いっぱい。02/01/21 19:13ID:???
Windowsとか、Linux, BSD, HPとか。
それと、言語はPerlなの?

0295名無しさん@お腹いっぱい。02/01/21 19:19ID:???
>>293 頑張れ!
君の開発環境を書くのだ。

しかし、宿題をスレに投げる という安直さがゴルァ!だ。
0296名無しさん@お腹いっぱい。02/01/21 19:27ID:6X0/37gM
全て英語で書かれてて、なんだか注文をそのまま英語にしたみたいです

Your name? Lucy
Occupation/Job Title? Comedian

Nice to meet you Lucy, Comedian!

名前を入れればそのままその名前が文章につかわれる
ってなのを前回説明されました。
これはPerlなのでしょうか?

0297名無しさん@お腹いっぱい。02/01/21 19:34ID:???
>>296
うーん・・・・・ 他になんかないの? 
全部英語で書かれてて、一行目が「#!/usr/local/bin/perl」です、とか。
0298名無しさん@お腹いっぱい。02/01/21 19:36ID:???
291と296の関係がよくわからん。
取りあえず、環境を書いてくれ。
UNIX系なのか、Windowsなのかぐらいは判別できるだろ?
0299名無しさん@お腹いっぱい。02/01/21 19:40ID:6X0/37gM
書かれてないんです。ってか質問しか書いてないので・・・。
とりあえず次の授業にきっぱりと出来ませんでしたって胸はって言います。
一緒に考えて下さってありがとうございました。
ところで、授業のレジュメにAlgorithmも学ぼうって書いてあります。
このAlgorithmもなにかの言語なのでしょうか?
0300名無しさん@お腹いっぱい。02/01/21 19:49ID:???
>>291に関連して素朴な疑問。
PerlでGUIのプログラムなんて出来ないよね?
ただ、適切なスレに誘導するために情報聞き出してるんだよね?
まさかPerlで書けるから聞いてるんじゃないよね?

ビクビク…。
0301名無しさん@お腹いっぱい。02/01/21 19:51ID:???
何のための言語バインディングだよ。素人か?
0302名無しさん@お腹いっぱい。02/01/21 19:52ID:???
>>299
ていうか授業出てなかったろ…。
出てれば絶対こんな質問しないぞ…。
0303名無しさん@お腹いっぱい。02/01/21 19:56ID:???
Perl, Ruby, Python, とか大抵ののスクリプト言語でGtk, Tk, Qt, Win32用のバインディングが用意されてるだろ。
0304名無しさん@お腹いっぱい。02/01/21 19:56ID:6X0/37gM
はい、素人です
やっぱりどうも難しいのでもっと初心者用のスレから出直してきます
ありがとうございました。。。
0305名無しさん@お腹いっぱい。02/01/21 19:58ID:???
>>304
>301は>300向けであって、あんたに言ってるんじゃないと思うぞ。
0306名無しさん@お腹いっぱい。02/01/21 20:01ID:hWcQ0KB7
>296
どう見てもこれはCの課題だよな。
0307名無しさん@お腹いっぱい。02/01/21 20:02ID:hWcQ0KB7
>291
VBかVCの課題だろ?
0308 02/01/21 20:07ID:OlNKxLTk
★必見★
パチマガで池上蓮から「旧友の自殺狂言騒動に抑えきれない嫌悪感」
で晒された本人(謎の人物)が池上に対して怒りまくってるぞ!!

謎の人物ホームページ↓
http://www.geocities.co.jp/Bookend-Hemingway/4715/

関連スレッド
謎の人物公式スレッド↓
http://kaba.2ch.net/test/read.cgi/pachi/1009686980/l50
030930002/01/21 20:13ID:???
>>301
はい。初心者です。
みんな当然のように答えてたから疑問に思ったです。
言語バインディング、検索逝ってきます。
ありがと。
031030102/01/21 20:14ID:???
>>300 きつい事言ってごめんな。
0311茶文字 ◆d38VidMY 02/01/21 20:15ID:???
>>306-307
ってことは、ここで聞いたコーディングがコンパイルされる可能性が
あったわけですね?(w

>>308
マルチポストウザイYo!
0312名無しさん@お腹いっぱい。02/01/21 20:18ID:???
>>311
何を聞きたいの?
もうちょっと分かりやすく書いてみて
031330002/01/21 20:19ID:???
ていうか、やっぱり釈然としないんだけど、
PerlでWindowsアプリケーションは作れないよね?
なんつーか、
> プログラムはグレー色のウィンドウで表すこと。
とか。。
それと同様にX Window のアプリケーションも作れないよね?
ってことはGUIのプログラムって作れないんでは?

んー。どこの考え方が間違ってるんだろう。。
「GUI」を勘違いしてるのかな…。
0314名無しさん@お腹いっぱい。02/01/21 20:26ID:???
>>313
一例。
http://freshmeat.net/img/screenshots/19044.jpg
(freshmeatで"Perl Gtk"とか"Perl Tk"で検索してみ。併せて100以上でてくるから)
検索エンジンなどでGtk-Perlとか、Perl/Tk, Perl/Qt. PythonならPyUI, PyQtとかを調べるよろし。

0315名無しさん@お腹いっぱい。02/01/21 20:27ID:???
>>311 あのさ、重箱の隅だけど、「コーディング」はコンパイル出来ないよ
(w とか言わずに一緒に勉強しようよ
>>313
Perlでは出来ないけど、TkとかGtk使えばperlの文法で出来るんだから
全然間違えて無いよ。
もし無くてもPerlが叩けるライブラリ書けば良いでしょ?
0316名無しさん@お腹いっぱい。02/01/21 20:30ID:???
質問者と同レベルの人が居るのがおかしいね
0317名無しさん@お腹いっぱい。02/01/21 20:35ID:hWcQ0KB7
>315
TkとかGtkを課題に出す情報処理系の宿題かこれ?
というそもそも論に帰ってしまった私です。
031830002/01/21 20:35ID:???
>>314-315
なるほど。ありがとうございます。

>>316
初心者だけどなんか役に立つこと出てくるかなぁと思って
かちゅ〜しゃのお気に入りに入れて巡回してますが。。
0319名無しさん@お腹いっぱい。02/01/21 20:50ID:???
311の意味が分からんのは俺だけかな・・・・
0320茶文字 ◆d38VidMY 02/01/21 21:01ID:???
311はことばの用法を間違ってましたスマソ
聞き流してくだされ>all

で、話は変わりますが。

Webサーバ上の特定のディレクトリにあるファイルをリストアップして、
ファイル一覧を表示するスクリプトを作りました。
せっかくだから各ファイルの更新日時を自動的に表示させたいのですが、
これはPerlでは無理なのでしょうか?

.cgiでSSIを許可するのはなんか怖いし、JavaScriptは自分自身あまり
ONにしないので、できたら避けたい今日この頃なんですが。
0321名無しさん@お腹いっぱい。02/01/21 21:15ID:???
んー、自動的と言うのはどう言う意味だろう(CGI殆ど書かないので。。)
基本的にそのディレクトリに有るファイルが、CGIのみから更新されるなら
SSIでincludeする(execは殺す)為のファイルを書き出すだけで良い。

もし、CGIが感知しない部分でダイナミックに更新されるなら
素直にCGIで表示するか、呼び出し元のHTMLを書き換えるしか無いんじゃ
無いかな
0322茶文字 ◆d38VidMY 02/01/21 21:32ID:???
>>321
早レスさんくす。

実はファイルリスト表示も各ファイルの内容閲覧も同じスクリプトでまかなっています(リストされるファイルはすべてHTMLのbody部分です)。

例)
hoge.cgi
 →引数がない場合はファイルリストを表示
hoge.cgi?page=020121
 →ファイル名が020121のファイルをbody部に取り込んで表示

なので、更新日時を表示するときの拡張子が.cgiなわけです。
SSIを使うには、.cgiからSSIを使えるようにしなければならないわけで、
これは320に書いたように避けたいのです。

てことは、ファイルリスト表示は.shtmlで出力してやるのが無難っぽいですね。
短いスクリプトなので、頭の体操だと思って最初から組み直してみます。
ありがとうございました。
0323茶文字 ◆d38VidMY 02/01/21 21:34ID:???
と書いてから気がついたのだけど、
組み直さなくてもHTML出力部分だけ付け足して、
そのあとリダイレクトすればいいのか?
0324名無しさん@お腹いっぱい。02/01/21 23:26ID:???
>>322
> hoge.cgi?page=020121
Taint check をしっかりとやるようにね。
0325名無しさん@お腹いっぱい。02/01/21 23:34ID:???
初めてご質問をさせていただきます。今、
$abcd = "AAAA";
open(CF, "./a.txt") || die "Can't open Header File $!";
 while (<CF>){
chop;
print;
}
close;
と記述しました。
a.txtには
$abcd
と書きました。ですが、どうしても上記プログラムを実行したら
$abcdと表示されるだけでAAAAと表示されません。どうにかして
$abcdを変数としてファイルより読みだすことはできないでしょうか?
0326名無しさん@お腹いっぱい。02/01/21 23:40ID:???
print eval($_);
かな?
0327名無しさん@お腹いっぱい。02/01/21 23:40ID:???
eval
032832502/01/21 23:51ID:???
>>326>>327
ありがとうございます。早速やってみます。
evalは、shでしか使ったことありませんでした。
勉強します
0329名無しさん@お腹いっぱい。02/01/22 01:09ID:???
>325=328
細かいことだけど、自分がたずねる質問に「ご」をつけるのは
ちょっと変だと思うよ。
0330名無しさん@お腹いっぱい。02/01/22 10:12ID:efarCwHc
すみません。お教えください
日記帳のように画像アップして1行コメントを入れるスクリプトを書いてるんですが
うまくいきません。
どこかによいサンプルはないでしょうか?
0331名無しさん@お腹いっぱい。02/01/22 10:36ID:???
>>330
http://pc.2ch.net/test/read.cgi/php/1003132904/l50
0332名無しさん@お腹いっぱい。02/01/23 04:57ID:sT5Qn28R
すみません。質問なんですが、
htmlファイル内の&を%44になおすプログラムを作っていて
以下のとおりやってはみたもののうまくいきません。
#!/usr/local/bib/perl

while(<stdin>){
s/&;/%44;/;
print;
}

どうしても置き換えてくれません。
教えてください。
0333名無しさん@お腹いっぱい。02/01/23 05:16ID:???
>>332
Perlへのパス
stdinからデータが読み込まれているか
検索・置換する文字列
を確認してみてわ
033433202/01/23 07:16ID:sT5Qn28R
>333
遅れてすみません
333さんがおっしゃられるところは確認しました。
自分で気になっているところは
test→test1みたいな普通の文字の置き換えはできるのですが
&とか%がはいっているとまったく駄目なのです。
どうしたら解決できるかわからなくて。。。
0335名無しさん@お腹いっぱい。02/01/23 09:25ID:fLlnsoLj
>>334 ほい。 

#!/usr/local/bin/perl

while(<stdin>){
s/&/%44/g;
print;
}
0336名無しさん@お腹いっぱい。02/01/23 19:47ID:SS/bYptO
メール件名をMIMEエンコードしようと思い、
CGIファイルと同ディレクトリに「mimew.pl」
http://www.cc.rim.or.jp/~ikuta/mime_pls/index.html を設置して、
CGI内のメールのヘッダ情報記述部分で
$mimew = './mimew.pl';
require $mimew;
$subject = "[カタログ請求]";
$subject2 = &mimeencode($subject);
open (SENDMAIL, "| $nkf | $sendmail -t -n") || die;
print SENDMAIL "To: $recieve\n";
print SENDMAIL "Bcc: $bcc\n";
print SENDMAIL "From: $mail\n";
print SENDMAIL "Reply-To: $mail\n";
print SENDMAIL "Subject: $subject2\n";
print SENDMAIL "Content-Type: text/plain; charset=\"iso-2022-jp\"\n";
print SENDMAIL "Content-Transfer-Encoding: 7bit\n\n";
上記のようにしたのですが、エンコードされません。
お助け。。。
0337名無しさん@お腹いっぱい。02/01/23 20:15ID:???
>>336 
$nkf = '/usr/local/bin/nkf';
$sendmail = '/usr/sbin/sendmail';
$mimew = '/フルパス書いてちょ〜/mimew.pl';

でどうよ。

0338ちょっとおしえて ごめんね02/01/23 20:48ID:FEde7HEx
http://money.2ch.net/test/read.cgi/build/1011774209/23 が言ってる
掲示板一覧ってどこから入るの?
0339名無しさん@お腹いっぱい。02/01/23 21:30ID:Pj40bVNf
http://www16.big.or.jp/~plustic/0range/JAPANESE/dustbox/404.html
の404のエラーの例として、.htaccessにて404.cgiを表示させてますよね。

この404.cgiの中で、ユーザーが打ち込んだURLを表示させてるんですが、
これってPerlでどう書いたらいいんでしょうか?
034033202/01/23 21:37ID:sT5Qn28R
333 335>
貴重なアドバイスありがとうございました。
解決しました。
あらためてありがとうございます。
0341名無しさん@お腹いっぱい。02/01/23 22:30ID:RVBh2RNr
1:自分はこう言う事がしたい。
テキストカウンタを作っている。
CGI自体はhtmlでなくテキストだけを吐いて、
イメージカウンタと同じような感じに
html内に挿入するようにしたい。

2:それでこんな風にやってみたが・・・
Content-typeをtext/htmlにしたままimgで貼ってみたけど

3:それだとこんなエラーが出て上手く行かなかった。
ペケが出るだけで無理だった。
0342名無しさん@お腹いっぱい。02/01/23 22:34ID:6XVla5oi
フォームメールcgiに手をくわえてます。
htmlフォームから送信ボタンを押すとcgiを呼んで確認で内容を一覧表示させてます。
そのあとにブラウザの戻るボタンを押したとき、htmlフォームに戻りますが、それまで
入力していた内容が消えてしまいます。元のcgiではブラウザの戻るボタンで戻っても
フォームに入力されていた内容は消えなかったんです。
この違いはどういった原因が考えられるでしょうか?
034334202/01/23 22:44ID:6XVla5oi
あれ?今度は戻るボタン押して戻ったらフォームに入力した値が出てた・・
CGIの影響じゃないのかな・・ この現象誰か知りませんか?

>>341
ペケが出るって事は画像へのリンクがうまくいってないんじゃないかな?
034434102/01/23 22:58ID:RVBh2RNr
>>343
いや、画像でなくテキストを挿入したいんですが
コンテントタイプの吐きかたとhtml側の呼び出し方がわからなくて
とりあえずimgで貼ってみただけです。。
CGIが画像を吐いてないので当たり前といえば当たり前なんですが。。

>フォーム
戻るボタンは単にブラウザが自分の履歴を表示しているんだから
この場合呼び出されてないCGIは関係ないと思います。
というか、どんな風に手を加えたらおかしくなったかを書くと吉と思われ。
0345名無しさん@お腹いっぱい。02/01/23 23:05ID:???
>>341
一般にはSSIやフレームが使われる。
034633602/01/23 23:07ID:7DXRWN8l
>>337
ありがとうございます。

今外出中なんで明日にでも試してみます。
034734102/01/23 23:16ID:RVBh2RNr
>>345
有り難うございます。
過去にフレームで画面をちっちゃく切り取って
そこにhtmlで吐いたカウントを放り込んでいたんですが、
それをやめたくていろいろ試しているので
SSIの方を調べてみようと思います。
0348名無しさん@お腹いっぱい。02/01/24 00:12ID:gcEosdJo
配列の中にある数字を指定した部分だけ検索したいんですが、

for ($no = 0; $no <9; ++$no){
@suuji = (1,2,3,4,5,6,7,8,9,10);
@kekka = grep /$no/, @suuji;
print "@kekka\n";
}

を実行すると、
10
1 10
2
3
4
5
6
7
8

と、10まで出てきてしまうんですが、
1から9までのみ出すようにするにはどうすればいいんでしょうか?
0349名無しさん@お腹いっぱい。02/01/24 00:15ID:???
for ($no = 0; $no <9; ++$no){
@suuji = (1,2,3,4,5,6,7,8,9,10);
@kekka = grep /^$no$/, @suuji;
print "@kekka\n";
}

誰でも思いつく一番簡単な変更はこれだわな。
0350ブロックで使うとお手軽だにゃん02/01/24 00:23ID:???
my @ary = qw(1 3 4 5 8 9 11 14 19);
my $max = 10;
my $min = 3;
my @result = grep{$_ > $min && $_ < $max}@ary;
print @result;
0351名無しさん@お腹いっぱい。02/01/24 00:32ID:???
print join "\n", grep { /^\d$/ } @hoge
0352名無しさん@お腹いっぱい。02/01/24 00:34ID:???
>>349-351
ありがとうございました。なんとか出来そうです。
正規表現だけで出来たんですね…。もっと本をよく読みます。
035335202/01/24 05:00ID:???
出来ない…

1 あいうえお
2 かきくけこ

というようなものが、配列に100個ほど入っているとして、
右の番号を指定して、その部分だけ左のものと一緒に取り出したいんですが…。

上のやりかただと、どうやっても出来なくて…。

このままじゃ気になって寝られない…でも寝ないと死ぬので寝よう…
0354名無しさん@お腹いっぱい。02/01/24 08:11ID:nUVwgo4z
>353
デリミタを使う。
1<>あいうえお
2<>かきくけこ
・
・
・
とする。
これを配列に読み込んで、、たとえば、@linesに読み込んだとしたら、
foreach (@lines) {
 ($number,$text) = split(/<>/,$_);
 if ($number eq "目的の番号") {
  print "番号は$numです。内容は$textです\n";
 }
}
こんなかんじになるわけ。
0355名無しさん@お腹いっぱい。02/01/24 09:08ID:???
FAQだと思うのですが
LinuxにPerlがインストールされているかどうかを
確認するには簡単にはどうするのでしょうか。

そのperlのVersionも表示させれると
うれしいのです。

よろしくサンクスコ
0356名無しさん@お腹いっぱい。02/01/24 09:12ID:nUVwgo4z
>355
コマンドラインから、
perl -V
0357名無しさん@お腹いっぱい。02/01/24 09:19ID:???
ありがとうございます。m(._.)m ペコッ
035833602/01/24 10:49ID:ENGsaylW
>open (SENDMAIL, "| $nkf | $sendmail -t -n") || die;
上記の部分を以下の様にすると、無事エンコード処理されました。
open (SENDMAIL, "| $sendmail -t -n") || die; #$nkfを外しました

結果的に解決はしたのですが、何が悪かったのかが分かっていません。
そもそも上記の箇所はいつもメール作成部分の定型的に使用していたの
で、nkfがどんな役割を果たしているのか、なぜnkfが絡むとエンコードさ
れなかったのかがわかっていません。
(ちなみにnkfは冒頭で $nkf = "/usr/bin/nkf -j"; と定義しています)

何が悪かったのでしょうか?
0359名無しさん@お腹いっぱい。02/01/24 11:11ID:LyCCkAYD
@EXPORT, @INC は何を意味して名前を付けたのかわかるのですが
@ISAって何の略なのでしょう?
0360名無しさん@お腹いっぱい。02/01/24 11:26ID:???
@EXPORTはそのまんま。
@INCはIncludeかねぇ。
@ISAはISAバスしか思いつかない・・・。
■ このスレッドは過去ログ倉庫に格納されています