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

【Perl】初心者コーナー Part17

■ このスレッドは過去ログ倉庫に格納されています
0001 ◆Go4ZKngPGE 02/10/14 17:24ID:???
いらっしゃーい、Perlの「コーディング」で困ってる人のスレです。

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

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

CGIだけど、なんか質問ある? Part 8
http://pc.2ch.net/test/read.cgi/php/1032704121/
参考書籍の話題は【Perl,CGI】参考書籍 第三版
http://pc.2ch.net/test/read.cgi/php/1030209573/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般/Part2】
http://pc.2ch.net/test/read.cgi/php/1030548610/
スクリプトの改造依頼は 【 スクリプト改造工房 PART 5 】
http://pc.2ch.net/test/read.cgi/php/1028193595/

過去ログ、その他の役立ち情報は>>2-10あたりを見よう。
0696nobodyさん02/11/08 14:13ID:???
693さんが使ってらっしゃる
CSV2TeX
は何処にあるCSV2TeXでしょうか?

すごく興味あります。ハァハァ。

0697nobodyさん02/11/08 16:10ID:???
>>696
あなたなら5〜6分でできるであろうような、自作Perl
スクリプトです。期待に添えずスマソ

0698nobodyさん02/11/08 21:55ID:???
>>695

>>692はちょっとわかりにくいけど、
> tail -364 hoge.txt|head -357
> は計算するのが面倒です。
っていうからにはいろんなファイルに対してそういう処理をするから
そのたびに計算するが面倒だってんじゃないの?

perl -i.bak -ne 'unshift@a,$_;print$a[7]if$.>13' でどう?
0699デフォルトの名無しさん02/11/08 22:20ID:???
>>698
へー、最後のところ読み飛ばしてレスしちゃった。
それにしても、あんたの案は頭いいね。もしかして、
あんた天才?

070069802/11/08 22:38ID:???
>>699
あはっ、そうだったら良かったんだけどね。
こういうの考えるのって楽しいよね。
0701nobodyさん02/11/08 23:15ID:???
ちと失敬。
配列を1個の変数にするにはどうすればいいんでしたっけか?
0702nobodyさん02/11/08 23:19ID:???
>>701
意味不明
0703デフォルトの名無しさん02/11/08 23:20ID:???
>>701
$scalar="@array";
$scalar=join("", @array);
とかさ。

070470102/11/08 23:22ID:???
>>702
他に説明のしようがござらん。
>>703
なるほど。ありがとうござる。
0705rubyist@カラアゲうまうま02/11/08 23:28ID:???
頭の不自由な人ですか?
0706nobodyさん02/11/08 23:34ID:???
おっ! 今夜も寂しんぼうがやってきた。

したーのほうにあったスレをご丁寧にあちこち探しまわってやっと見つけた

このスレにカキコですか・・・
0707rubyist@カラアゲうまうま02/11/08 23:38ID:???
20番前後で「したーのほう」とは随分目が悪いんだな(w
厨房質問ばかりなのがいかにもPerlスレらしい
0708rubyist@カラアゲうまうま02/11/08 23:41ID:???
何でk身うj食う入れjyr!
こて手見せる!
0709nobodyさん02/11/08 23:44ID:???
rubyは興味あるけど
こんな人間になっちゃうんなら触らない方がいいかな
0710nobodyさん02/11/08 23:50ID:???
いらっしゃーい、Perlの「コーディング」で困ってる人のスレです。

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

1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
0711rubyist@カラアゲうまうま02/11/08 23:51ID:???
>>710
1:Perlコミュニティの壊滅
2:取りあえず2chで煽ってみた
3:あんまりまともに相手にされない
0712nobodyさん02/11/08 23:56ID:???
上下フレーム式の2ショットチャットCGI作ってるんですが、
相手が入室した時に、上フレーム内に相手の名前を表示させるために
1回だけリロードさせたいんですが、
下のフレームだけがリロードされて上のフレームはリロードできないんです。
Location: 以外で、上のフレームだけをリロードさせる方法無いでしょうか?
0713nobodyさん02/11/08 23:59ID:???
>>712
もうちょい詳しくね。
ソースの関係あるとこ見せてみ。
0714nobodyさん02/11/09 00:04ID:???
>>712targetの問題でわ
071571202/11/09 00:07ID:???
説明しにくくてすみません・・

上のフレーム: 発言窓と参加者リスト
下のフレーム: 発言ログ

で、
相手が参加した時の動き

上のフレーム: 参加者リストに相手の名前追加
下のフレーム: 相手の入室サイン

となるようにしたいのですが、
下のフレームはMETAタグが仕込まれているのでRefresh時間を0にするだけで
リロードは即時に出来るんです。
しかし上のフレームは発言窓で固定のため、METAタグを仕込めず、
リロード出来ないのです。
この「相手が参加した時の動き」のサブルーチンは、
下フレーム内のリロードの処理だけ入ってるんです。
0716nobodyさん02/11/09 00:08ID:ohpSmuMz
/home/foo/bar/hoge/fuga.txt
/home/foo/bar/hoho.txt
というリストから、*.txtを削除する方法はありませんか?
071771202/11/09 00:08ID:???
>>714
METAタグにはtarget効きませんでした。
0718nobodyさん02/11/09 00:12ID:???
>717
JavaScript使え。
0719nobodyさん02/11/09 00:13ID:???
>>712=715
言ってることがよくわからん。混乱してない?

そもそも、
>相手が参加したときの動き
って、リロードする前に相手が参加したかどうかはわからないよね。
で、なんでまたMETAでリロードする必要があるの?
0720nobodyさん02/11/09 00:14ID:???
>>716
s/[^\/]+\.txt$//;
072171902/11/09 00:16ID:???
あ、上フレームをリロードするため?そりゃ無理だ。
それなら、やっぱり>>718の言うとおりJavaScriptだね。
ただ、入力欄のあるフレームを勝手にリロードすると大変
使いにくいチャットになると思われるので、その辺注意して。
つーか、なんでリストを下のフレームに表示しちゃいけないの?
0722nobodyさん02/11/09 00:17ID:2uRXoRQG
現在、メール送信のプログラムを書いているのですが、
sendmailじゃなくて、smtpで送りたいんです。
ただ、サーバがモジュールが使えないので、
モジュールなしでのsmtpサーバ経由のメールの
送り方をご存じの方ご教授願います
072371202/11/09 00:18ID:???
>>721
Javascriptで1回きりリロードって出来ます?Perlスレなのにすみません・・。

下のフレームにリスト表示したくないんです。
0724nobodyさん02/11/09 00:19ID:???
参加者リストは下フレームに置くのが一般的。
上に1回だけ表示させてもいなくなった人は消えないし後から来た人が追加されることもない。
0725nobodyさん02/11/09 00:20ID:ohpSmuMz
>>720
ありがとうございます。感謝です。
0726nobodyさん02/11/09 00:24ID:???
御願いします。

cat -n で複数ファイルを番号つきで見ています。
下のようにするとファイルの境界がなくなって見ずらいです。

-------------------
とか入れることできないでしょうか?

$ for i in `seq 1 2`;do cat -n vba.$i;done
1 With ActiveSheet.UsedRange
2 Set r = .Rows(.Rows.Count).Offset(1, 0)
3 For Each c In r.Cells
4 c.FormulaR1C1 = "=SUM(R[-" & c.Row - 1 & "]C:R[-1]C)"
5 Next
6 End With
7 End Sub
1 With ActiveSheet.UsedRange
2 Set r = .Rows(.Rows.Count).Offset(1, 0)
3 For Each c In r.Cells
4 If c.Column <> 1 Then
5 c.FormulaR1C1 = "=SUM(R[-" & c.Row - 1 & "]C:R[-2]C)"
6 End If
7 Next
8 End With
9 End Sub
0727nobodyさん02/11/09 00:28ID:???
---------------------- の内容のファイルを用意し(仮に line.txt)

% cat -n xxx line.txt
0728nobodyさん02/11/09 00:44ID:s/UCnmus
奮戦記
http://www.geocities.co.jp/SiliconValley-Oakland/9753/fusigi1.htm

072971902/11/09 00:46ID:???
>>723
> Javascriptで1回きりリロード
参加者が変わったときだけ上フレームをリロードするJavaScriptを
下フレームのHTMLに挿入すればいい。
でもさっき言った入力欄の問題があるから、さらに上フレームは
分割したほうがいいかもね。

リロードしないで直接JavaScriptで上フレームに書いてやってもいいと
思うけど。
0730nobodyさん02/11/09 00:52ID:???
>>727
その方法は、例えば、僕は連番ファイルを
$ for i in `seq 1 2`;do cat -n vba.$i;done
のようにして読んでるので、ひとつのファイルを読むたびに
line.txtを読みこむ必要がありませんか?







0731nobodyさん02/11/09 00:55ID:???
>>709
そのセリフを言わせるのが奴の目的だから相手するな。
0732nobodyさん02/11/09 00:58ID:???
>>730
$ for i in `seq 1 2`;do cat -n vba.$i line.txt;done
0733ペール02/11/09 01:03ID:su5V8ups
はじめまして。

index.html等から、cgiを呼び出して、その結果を出力したいのですが、
htmlに<img src="〜.cgi">という風に書くと、
画像がないときの表示になりました。
どうすれば解決できますか。
教えてください。
0734nobodyさん02/11/09 01:07ID:???
>>733
ヘッダ書いてる?
0735ペール02/11/09 01:10ID:su5V8ups
>>734
レスありがとうございます。
ヘッダには、
"Content-type: text/plain"
と書いてあります。
0736nobodyさん02/11/09 01:13ID:???
GIFファイルなら Content-type: image/gif\n\n

JPEGファイルなら Content-type: image/jpeg\n\n

とかじゃない?
0737ペール02/11/09 01:15ID:???
書き忘れてました。
テキストを表示させたいと思ってます。
たとえば、掲示板で、最後に書かれた記事とかを
表示させるにはどうすればいいんでしょうか?
0738nobodyさん02/11/09 01:16ID:???
>>737

>>733で<img src="〜.cgi">って書いてるよ?
0739ペール02/11/09 01:18ID:???
<img src="〜.cgi">でcgiを呼び出そうと思ったのですが、
テキストを表示させたい場合にはそこがまずいんでしょうか?
自分でもいろいろ調べてみたのですが、見つからなくて・・・
0740nobodyさん02/11/09 01:25ID:???
>>739
frameかiframe使う。
0741ペール02/11/09 01:33ID:???
フレームで分割して、その部分だけcgiで書けばいいってことですかね?
0742マリモーマ02/11/09 05:33ID:zHgBIOSq
あと SSIかな?
0743nobodyさん02/11/09 06:40ID:???
>>724
自分が発言した時には更新されるんじゃない?
0744nobodyさん02/11/09 09:35ID:QCjNu4vr
SSIが一番いいと思うが。
text/plainで出力するわけだし。
0745nobodyさん02/11/09 10:37ID:???
つかCGIで出力したテキストをHTMLに表示できると思ってるのが間違いであると素直に教えてあげた方が。
だから一般的なアクセスカウンタはテキストじゃないわけだし
0746nobodyさん02/11/09 10:51ID:???
XMLで出力、これ最強。
0747nobodyさん02/11/09 11:24ID:???
GD.pmでイメージに変換するというのはどうだ。(w
0748nobodyさん02/11/09 11:47ID:???
JavaScript
0749nobodyさん02/11/09 12:46ID:???
投稿内容チェックしたいんですけど、
半角英数字以外と数字以外の規制はどうやればいいですか?
0750nobodyさん02/11/09 12:50ID:???
die if /\W/;
0751nobodyさん02/11/09 16:50ID:???
ここはPerlの質問用スレッドだということを分かっているのかな。
0752nobodyさん02/11/09 18:22ID:???
>749
ttp://pc.2ch.net/test/read.cgi/php/1032704121/567n
0753Ruby!!!!!!!!!!!02/11/09 19:20ID:???
ここは糞言語の質問用スレッドだということを分かっているのかな。


0754nobodyさん02/11/09 20:17ID:???
>>750
dieはまずいでしょう。
0755nobodyさん02/11/09 22:08ID:???
>>754
チョトワラタ
言われてみればそうだ
0756デフォルトの名無しさん02/11/10 08:28ID:???
>>750
`kill 投稿者`と言いたかったんだろ。

0757nobodyさん02/11/10 10:48ID:/Zxw7C49
Perl でブラウザのJavaScriptがONになっているのと、なっていないのとで、
処理を分けることは可能でしょうか?
環境変数か何かから受け取れるとか^^;

やはり、Perlのソース内(ページ表示部分に)に
JavaScriptのソースを直接書くしかありませんか?

微妙に板違いかもしれませんが、よろしくお願いします。
0758nobodyさん02/11/10 10:53ID:???
>>757
多分、無理だと思う
0759nobodyさん02/11/10 11:00ID:???
>Perl でブラウザのJavaScriptがONになっているのと、なっていないのとで、
>処理を分けることは可能でしょうか?

無理
0760nobodyさん02/11/10 11:43ID:???
758氏、759氏
お答え、ありがとうございました。
0761nobodyさん02/11/10 12:31ID:???
>>757
余裕でできるよ
0762nobodyさん02/11/10 12:36ID:???
>>757
onBlurとかで出来る気はするけどなぁ
0763nobodyさん02/11/10 13:28ID:???
>757は、CGIのソースのHTML表示部分にJavaScriptを直接書く方法以外でってことでしょ。


もとの文字列($hoge)と、その文字列の一部分を置換した文字列($piyo)が欲しいとき
$piyo = $hoge;
$piyo =~ s/xxx/yyy/;
ってやってるんだけど、一発でいける方法ってある?
0764nobodyさん02/11/10 13:34ID:???
>>763
既出
0765nobodyさん02/11/10 13:39ID:???
$hage="あ";
の$hageがshift_jisだったら、真を返すには、
どうすればいいのですか?
(jcodeを使用せずに。)
0766nobodyさん02/11/10 13:39ID:???

>764
このスレ?
リンクとか張ってもらえると嬉しいが、探すの面倒なら
検索キーワードくらい教えてくれ。

っていうか、答えいて。
0767nobodyさん02/11/10 13:41ID:???
質問です。
HPを二つ持ってて同じ掲示板を使っているんですが・・・
SKINだけ別々にできますか?
0768nobodyさん02/11/10 13:57ID:???
>>766
($piyo= $hoge) =~ s/xxx/yyy/;
って764はいいたいんじゃないの
できるかは試してないけど
0769nobodyさん02/11/10 13:59ID:???
>>767
それぞれの外部スタイルシートをリファラで分岐させるとかくらいでは
0770nobodyさん02/11/10 14:02ID:???
>>765
$hage eq 'shift_jis'
0771nobodyさん02/11/10 14:06ID:???
>>769
リファラってなんですか?
0772nobodyさん02/11/10 14:08ID:???
>>765
if($hage eq 'あ'){print 'SJISぽ'}
else{print 'SJISじゃないぽ'}
0773nobodyさん02/11/10 14:13ID:???
>>771
リファラとはリンク元のこと。掲示板が置いてあるページのURLが返ってくる。
リファラがA.htmだったらA.cssを使い、
B.htmだったらB.cssを使うようにしてみれば、とゆこと。
ブックマークやブラウザの種類によってはリファラが空の場合もあるけど
0774nobodyさん02/11/10 14:47ID:???
>>771
if ($ENV{'HTTP_REFERER'} =~ /a.html/) {
print "<LINK REL=\"stylesheet\" HREF=\"a.css\" TYPE=\"text/css\">";
} else {
print "<LINK REL=\"stylesheet\" HREF=\"b.css\" TYPE=\"text/css\">";
}
0775nobodyさん02/11/10 15:41ID:???
>>774
いかがなものか・・・
0776nobodyさん02/11/10 15:58ID:???
全てのグローバル変数を初期化するにはどうすればいいんでしょうか?
ひとつずつ書くしかないのでしょうか?
0777nobodyさん02/11/10 16:29ID:???
print '777get記念にティンコ袋の毛をソイエで奪毛'
0778nobodyさん02/11/10 16:32ID:???
>>776
実行しなおすと、自動的に初期化される仕様です。
0779nobodyさん02/11/10 16:53ID:???
>>778
mod_perlかspeeycgi使いたいので
前の変数が残ってると変な動きするんで...
0780 ◆hMJAPH9PWA 02/11/10 16:58ID:???
>>779
use strict;して変数はmyで宣言する
0781nobodyさん02/11/10 17:38ID:???
mod_perlの罠 〜 その1
スクリプト全体は一つの大きなサブルーチンとして呼び出されます。
そのため、
0782nobodyさん02/11/10 19:09ID:gP4L1IC3
はじめまして
perlとDBIを使ってoracleデータベースに接続してselect等の結果をHTMLで表示
したいのですが行き詰まってしまいました。

ActivePerlのPPMを使って

ppm
install DBI
ppm
install DBD-oracle

と入力したのですが

install_driver(oracle) failed: Can't load 'C:/usr/local/site/lib/auto/DBD/Oracle
/Oracle.dll' for module DBD::Oracle: load_file:このアプリケーションの実行に必要
なライブラリ ファイルのうちの 1 つが見つかりません。 at C:/usr/local/lib/DynaLoa
der.pm line 206.
Compilation failed in require at (eval 1) line 3.
Perhaps a required shared library or dll isn't installed where expected

上記のようなエラーが出てしまいます。
何が問題なのでしょうか?よろしければご教授お願いします。
078378202/11/10 19:12ID:gP4L1IC3
すいません
ppm
install......
の後oracleデータベースに接続できるようなプログラムを作って
そのプラグラムをコマンドラインから実行すると上記のエラーが出ます
0784nobodyさん02/11/10 23:13ID:???
>>782
oracle.dllがリンクしてるdllが無い。OCIW32.DLLとやら要るんじゃないか?
0785nobodyさん02/11/11 22:36ID:???
すみません、色々資料探したのですが分からなかったので教えてください
Ambiguous call resolved as CORE::exit(), qualify as such or use & at hogehoge.cgi line 975.
っという警告を吐かれて、どうすれば修正できるのかわかりません( ´Д⊂
他の個所でexitとか使ってても警告吐かれないのになんでだろう…

あと、外部設定ファイル(require "setting.cgi")に、色々変数に放り込んで設定が書いてあるんですけど
myとかでローカル変数にしてしまうとmainから読み込めなくて困ってます
かといってmyつけないとガンガン警告吐かれるし( ´Д⊂

すみませんが、解決方を御教授いただきたく思います、お願いします
0786nobodyさん02/11/11 23:21ID:v+DAnj2A
Perl5.8.0(win32)を試してるのですが、eucを読み込んで
内部形式に変換することができません。お助けを・・

use Encode;
$fname = "euc.txt";
open(FILE, "<$fname") or die;
$euc = <FILE>;
close FILE;
$str = decode('euc-jp', $euc);
print $euc."\n".$str;
0787_gunzip ◆eiH/XdoCNg 02/11/12 02:06ID:???
>>785
前者: おんなじパッケージに自分で定義したサブルーチンexitがあるので、exit()と
書かれた場合どちらを呼び出すのか曖昧だけど、組み込みの方を呼ぶことにしたよ、という意味(だいたい)
自分で定義した方を呼び出したければ、前にアンパサンドを付けて&exit()のように呼び出せばいい。
そうでなければCORE::exit()とすれば警告は出ない。
詳しくはuse diagnostice;して調べて。

後者: >Perl5.6 ならばourを用いて宣言する。
それ以外の場合は use vars qw[$foo @bar] とする。
----------------
>>786 v5.8.0(built for i686-linux-thread-multi)では普通に動くよ。
変換できない、とはどのように出来ない?
open my $infile, "<:encoding(euc-jp)", $filename or die $!;
で勝手に変換してくれるし楽になったなぁ。
0788_gunzip ◆eiH/XdoCNg 02/11/12 05:44ID:???
すまん。
>>787では、Encodeモジュールが動かないのだと勝手に勘違いして「動くやん」と書いてしまった。

VC++6でコンパイルしたPerl5.8.0(built for MSWin32-x86-multi-thread)で試してみた。
それで思ったのだが、
use encoding "shiftjis";
とか、
use encoding "utf8", STDOUT => "shiftjis";
とするか、
binmode(STDOUT, ":encoding(shiftjis)");
が必要なのだなぁ。取りあえず報告までに
0789nobodyさん02/11/12 11:29ID:???
mod_perlというのはどのレンタル鯖とかでも組み込まれているものなのでしょうか?
CGI可とかPerl可とか曖昧にしか書いてないところが多いのですが。
0790nobodyさん02/11/12 11:50ID:???
>>789
共用なら普通動きません。
昔、mod_perlを開放して痛い目にあってた鯖屋を知ってます。
079178602/11/12 12:49ID:ucbSPxI8
わざわざ調べてもらってありがとうございます。788さんのを
ヒントに色々やってたらできました。using encode("shiftjis")
で内部の使用形式を変えているのですね。ただ、shiftjisの
問題は解決されていないようでしたので、eucかutf8で処理して
コンソール出力時にshiftjisにするように書くことにしました(汗。
内部形式に変換するにはEncode::decode("euc-jp", $euc)と
書けばできました。ありがとうございました。
0792nobodyさん02/11/12 15:43ID:kFsoQdfX
本当は改造なんですけど、改造工房よりこちら向けかと思ったので。
よろしくおながいします。

掲示板などの書き込み欄で
平仮名だけを入力したい時ってどう書けばいいんでしょうか?
例えばメール欄にアルファベットか数字のみしか入力させたくない場合
if ($in{'email'}){
if ($in{'email'} !~ /[\w\.\-]+\@[\w\.\-]+\.[a-zA-Z]{2,3}/){
&error("不正な入力です");
}
}
こんな処理を、平仮名でやりたいんです。
リファレンスサイトで調べても未記入の際のエラーはあっても
「○○以外の入力は不正」とする処理で、平仮名を対象にしたものを
見つける事ができませんでした。
perlはまるっきり分からないので、とんちんかんな事言ってたらすみません。
(自分なりにやってはみたんですが、案の定internet server error...)
0793nobodyさん02/11/12 15:57ID:???
>792
まずはひらがなをどうやって判定するかを考える。
文字コードの勉強からはじめよう。
0794nobodyさん02/11/12 16:02ID:???
>793
正規表現が先では?
0795nobodyさん02/11/12 16:34ID:???
>>785
後半について。その外部設定ファイルの先頭でuse strict; せずに、
package Set;
などとして適当なパッケージにして、mainで参照するときに
$Set::var
などとパッケージ名をつければ読めます。
パッケージに隔離すれば、その中で宣言された変数はグローバルにはならず、
パッケージ変数になりますので安心して使用できます。

■ このスレッドは過去ログ倉庫に格納されています