Perlでリクに答えるスクリプトを作るスレat TECH
Perlでリクに答えるスクリプトを作るスレ - 暇つぶし2ch784:デフォルトの名無しさん
09/01/22 17:02:14
>>781
初めに思ってたのと何か違う質問になってるな
<textarea
ああいうえお
かきくけこ
さしすせそ</textarea>
これを1行ずつ表示させたいのではなくて?

use CGI;
my $q = CGI->new;
print $q->header( -type => "text/html");
my $body = $q->param( 'body' );
$body =~ s/\x0D\x0A|\x0D|\x0A/\n/g;
my $li;
for my $word (split "\n", $body) {
  $li .= "<li>$word</li>";
}
print <<"HTML"
<form method="post" action="">
<textarea name="body">
a</textarea>
<input type="submit" />

$li</form>
HTML

785:775
09/01/22 18:05:17
>>782-783
ありがとうございます。
URL先と書いていただいた内容を参考にさせていただき、勉強致します。
>>784
ありがとうございます。
自分でも書いていて変だということに今気づきました。
簡単に纏めると、
①フォームに文章を書いてもらい、受け渡す
②それを受け取り、改行毎に一つずつ変数を持たせて並べる
みたいな感じです。
今も書いていて意味がわかりずらいです。
本当にすみませんでした。

786:775
09/01/22 23:39:14
どうしても出来ませんでした…
どうやっても500エラーから逃れられません…

>>782-783様や>>784様のを組み込もうと考えていたのですが、何か根本的に私のは間違っていたみたいです。

申し訳御座いませんが、出来れば一通りのサンプルのようなものを作成していただけないでしょうか?

仕様は何度か書かせていただきましたが、
①test.cgi(仮)にアクセスするとフォーム表示
②フォームに
[あいうえお]
[かきくけこ]
[さしすせそ]
等を複数行記入してsubmitを押す
③submitを押すと
◆1行目
あいうえお です。
◆2行目
かきくけこ です。
◆3行目
さしすせそ です。
のように表示される。

このようなのをお願いしたいのですが、やはり難しいでしょうか?

どなたか何卒宜しくお願い致します。

787:デフォルトの名無しさん
09/01/23 15:09:16
>>786
500エラーのエラー内容ください。

788:775
09/01/23 15:27:16
@textらへんでエラーが出てるようですが、
明らかに自分が書いた部分が掛かっていると思われますので、
修正というよりは1から作り直したいのですが、お手伝いしていただけますでしょうか?

789:デフォルトの名無しさん
09/01/23 15:28:54
>>788
エラーログが見れない環境?
>>784コピペするとどうなる?

790:デフォルトの名無しさん
09/01/23 15:42:16
すでに >>784 で答えが出てるじゃないか。
何が不満なのか?
スクリプトをホームページへ設置するやりかたまで
手取り足取り教えろとでも言うのか?

791:775
09/01/23 18:07:42
>>789
すみません、エラーログは見れません。
>>784をコピペして使うと500が出ます。

792:デフォルトの名無しさん
09/01/23 18:31:21
じゃ、「http 500」でググれ

793:775
09/01/23 21:07:22
フリーのPerlチェッカーでチェックしました。

Perlのエラー出力
Unrecognized character \241 at tmp.pl line 8.


ソース
0001: use CGI;
0002: my $q = CGI->new;
0003: print $q->header( -type => "text/html");
0004: my $body = $q->param( 'body' );
0005: $body =~ s/\x0D\x0A|\x0D|\x0A/\n/g;
0006: my $li;
0007: for my $word (split "\n", $body) {
0008:   $li .= "<li>$word</li>";
0009: }
0010: print <<"HTML"
0011: <form method="post" action="">
0012: <textarea name="body">
0013: a</textarea>
0014: <input type="submit" />
0015: $li</form>
0016: HTML

8行目の何が問題なのでしょうか?

794:デフォルトの名無しさん
09/01/23 22:43:07
まさか、インデント用の全角スペースをそのままコピペしてた、
というオチではないだろうな。

795:775
09/01/23 22:59:08
いえ、削除致しました。

796:775
09/01/23 23:04:46
print <<"HTML"
でエラーが出ました。

797:デフォルトの名無しさん
09/01/24 00:05:34
Unrecognized character \241 at tmp.pl line 8. って出てるじゃないか。読めないの?

798:デフォルトの名無しさん
09/01/24 00:08:32
>>796
これだろ?
Can't find string terminator "HTML" anywhere before EOF at m.pl line 10.

799:775
09/01/24 00:25:31
>>798
はいそれです。

800:デフォルトの名無しさん
09/01/24 05:21:38
最後に改行を入れてないためのエラーか。
というか、>>793は全角スペースのエラーだよね。>>794は言ってることあってたと思うんだけど会話になってないな。

801:775
09/01/24 06:00:43
>>800
確かにそうでした。
全角削除しても500出てたので勘違いしていました。すみませんでした。

最後に改行を入れた所、チェッカーでのエラーは無くなりましたが、未だにアクセスすると500になります。
何か原因などあるのでしょうか?

802:デフォルトの名無しさん
09/01/24 08:04:02
シェバング行がねーよwwwアホスwww

ここまで書かないとだめか?

803:デフォルトの名無しさん
09/01/24 08:37:46
これはひどい。

とにかく、ひどい

804:775
09/01/24 10:24:36
すみません、理解出来ませんでしたので御説明いただけると有り難いです。

805:デフォルトの名無しさん
09/01/24 11:03:48
シェルやCGIなどのインターフェイスを介してスクリプトを実行させる際に、
スクリプトの一行目に、どのプログラムで解釈させるのかを書いておく。
その行をシェバング(sharp bang/shell bang)行と呼ぶ。
その行が欠落している。

詳しくは、お使いのサーバの管理者にお尋ねください。

806:デフォルトの名無しさん
09/01/24 11:40:03
コメニケーション能力不足

807:デフォルトの名無しさん
09/01/24 11:40:40
会話のキャッチボールができていない

808:デフォルトの名無しさん
09/01/24 12:19:41
ここまでくるとスレタイ通り全部作った方がいいのかな?不毛なやりとりだからもう下のやつコピーして終了にすればいいよ
ファイル名はtext.cgi。実行権限を付ける。
=====ここからコピー=====
#!/usr/bin/perl -T

use strict;;
use warnings;

use CGI;

my $q = CGI->new;
print $q->header( -type => "text/html");
my $body = $q->param( 'body' );
$body =~ s/\x0D\x0A|\x0D|\x0A/\n/g;
my $li;
for my $word (split "\n", $body) {
$li .= "<li>$word</li>";
}
print <<"HTML"
<form method="post" action="">
<textarea name="body">
</textarea>
<input type="submit" />

$li</form>
HTML

__END__
=====ここまでコピー=====

809:デフォルトの名無しさん
09/01/24 12:26:39
>>806-807
つーか、クレクレだしな。

810:775
09/01/24 12:31:09
>>805
説明ありがとうございます。
そのような事すら知りませんでした。
勉強になります。
ありがとうございました。
>>806>>807
申し訳御座いませんでした。
リアルで話し下手なのがこのような場でも御迷惑をおかけしたことを大変恥じております。
これからはperl以前にそのような事にも気をつけたいと思います。
本当に申し訳御座いませんでした。
>>808
最後までご丁寧にありがとうございます。
コピーして使わせていただきます。
本当にありがとうございました。

このスレに来るのはこれで最後にします。
御迷惑ばかりおかけして本当に申し訳御座いませんでした。

811:デフォルトの名無しさん
09/01/24 12:46:06
結局改行の話以前のやり取りになったなw

812:デフォルトの名無しさん
09/01/25 14:23:19
バレンタインというものを人々の記憶から消し去るスクリプトを作ってください

813:デフォルトの名無しさん
09/01/25 15:34:59
>>812を葬れるスクリプトお願いします

814:デフォルトの名無しさん
09/01/25 15:56:54
>>813の呪いを消し去るスクリプトを作ってください

815:デフォルトの名無しさん
09/01/25 22:22:02
$str = "人々の記憶";
$str =~ s/バレンタインというもの//g;

816:デフォルトの名無しさん
09/01/26 02:52:28
なんというシンプルさ

817:デフォルトの名無しさん
09/01/27 14:39:23
>>813って殺人依頼じゃね?

818:デフォルトの名無しさん
09/01/30 10:24:51
アゲ

ナイ

819:デフォルトの名無しさん
09/01/30 21:01:09
>>817

うむ、だが不能犯だな。

820:デフォルトの名無しさん
09/02/01 13:37:25
無能犯


821:デフォルトの名無しさん
09/02/02 01:40:10
まあ、ギリギリアウトだな

822:デフォルトの名無しさん
09/02/04 22:36:00
・スクリプト
マイリンク
・用途
リンクスクリプトで個人個人が好きなサイトをマイリンクに登録し、登録すると登録したサイトをマイリンクで確認出来る
・仕様
①個体識別情報(携帯端末は個体識別番号、パソコンはIPアドレス)で判断し、それぞれの端末毎にマイリンクを表示させる
②マイリンクページでマイリンクしたサイトの削除が可能(個人個人で)
③追加はリンク表示の横の[追加]リンクを押すことで追加
④マイリンクページでのマイリンクの表示数は10件程度で、超えた場合は次のページに表示

こんな感じのをお願い出来ませんでしょうか?
使っているリンク集スクリプトはKENT WEBさんのコスモナビです。

どなたか宜しくお願いします。

823:デフォルトの名無しさん
09/02/04 23:31:00
既存のSBMの何が不満なんだ

824:822
09/02/07 11:32:30
>>823
自分が今サーバーに設置して使っているリンク集に、ユーザーが使えるマイリンク機能を追加したいのです。
3000サイトくらい登録しているので、利用者からマイリンク的なものを使えるようにしてくれと要望がありましたので此処にお願いに参りました。

822に追加でマイリンクページでカテゴリ分け(カテゴリ作成、編集、削除)出来たら最高です。

どなたか何卒、宜しくお願い致します。

825:デフォルトの名無しさん
09/02/08 17:38:53
お願いしますage

826:デフォルトの名無しさん
09/02/10 17:48:33
DOSのバッチをPerlに書き換えてくれたりする?

827:デフォルトの名無しさん
09/02/10 18:10:37
そんなの簡単。system 関数使えばいいじゃん。

828:デフォルトの名無しさん
09/02/13 19:51:28
1,2,3の数字を組み合わせて25桁の数字をだーーっと表示するスクリプトを何卒お願いします。

829:デフォルトの名無しさん
09/02/13 20:43:55
sub f {
my ($s, $d) = @_;
if ($d == 25) {
print $s, "\n";
}
else {
f($s.1, $d+1);
f($s.2, $d+1);
f($s.3, $d+1);
}
}

f('', 0);

830:デフォルトの名無しさん
09/02/13 23:04:58
>>829
ありがとうありがとうありがとう!

831:デフォルトの名無しさん
09/02/15 00:43:27
現在そのスクリプトにアクセスしている人数を表示出来るスクリプトお願いします。

よくある[○人オンライン中]的なやつです。
時間は60秒くらいまでをオンライン中扱いにして、携帯電話も正確にカウントされるようにお願いします!

832:デフォルトの名無しさん
09/02/15 03:51:35
#mes = "自分以外誰もアクセスしてなくて悲しい思いすることになるからやめとけ";


833:デフォルトの名無しさん
09/02/15 06:10:14
www

834:デフォルトの名無しさん
09/02/15 06:52:16
訪問者多いから書いてんだろ多分

ちなみに俺のサイトなんて月10人くるかわからない程だぜ

835:デフォルトの名無しさん
09/02/15 07:18:58
しかもそれが検索エンジンのボットだったりするんだな

836:デフォルトの名無しさん
09/02/16 18:36:46
切実に>>822をお願いします。
リンクの保存はリンクIDで行うようにしていただけると助かります。

837:デフォルトの名無しさん
09/02/17 16:46:43
〉〉⑧③⑥
この中にあると思うから好きなのを選べ
URLリンク(www.google.co.jp)

838:デフォルトの名無しさん
09/02/17 17:12:31
>>837
残念ながらありませんでした。

839:831
09/02/22 15:39:29
お願いします

840:デフォルトの名無しさん
09/02/25 23:47:12
あげ

841:デフォルトの名無しさん
09/03/27 18:34:39
@list = ('START', 'a123', 'a456', 'END', 'START', 'b123', 'b456', 'END');
foreach (@list) {
 if ($_ eq START) {
}
}

842:デフォルトの名無しさん
09/03/27 18:45:57
C言語の関数だけがズラズラと書かれているファイルを読ませると、
関数名でソートして出力するスクリプトを作ってください。
例:
bool test() {
 return 1;
}

int main() {
 { コメント }
 return 0;
}

結果:
int main() {
 { コメント }
 return 0;
}

bool test() {
 return 1;
}

よろしくお願いします。

843:デフォルトの名無しさん
09/03/30 08:11:51
c のソースを hoge.c として、
以下のスクリプトを hoge.pl として保存
perl hoge.pl hoge.c
====
my %hash ;
my $name ;
while (<>){
 if ( /^\S+\s+(\S+)\s*[(].*?{/ ){ $name = $1 ;}
 $hash{$name} .= $_ ;
}
printf "%s\n", $hash{$_} for sort keys %hash ;
# インデントは全角空白なので、注意。
====
後は自分で工夫して下さい。

844:デフォルトの名無しさん
09/03/30 12:03:19
全然要求を満たしていなくてワロタw

845:デフォルトの名無しさん
09/03/30 12:18:04
Cの関数の切り分けというのは、コメント行の処理など考えると、
自分でプリプロセッサつくるぐらい面倒くさいだろうな。



846:るん(pafe) ◆mB5uKa4bvY
09/04/02 01:35:18
タイムアウト処理に関する質問です。
このページを参考にしますと
URLリンク(www.futomi.com)
の最初のスクリプト例

$SIG{ALRM} = \&timeout; # ALRM シグナルをキャッチした場合の処理を定義
alarm 10; # タイマーを 10 秒にセット
・・・
・・・
#タイマーで時間を監視したい処理
・・・
・・・
alarm 0; # タイマーをキャンセル

sub timeout {
#タイムアウトした際に実行する処理
}

上記例において、
#タイマーで時間を監視したい処理
sleep(100);
#タイムアウトした際に実行する処理
print 'timeout';

とすると、タイムアウトが一旦発生するとタイマー監視していた処理(sleep)の途中で「timeout」が一回表示されてプログラムが終わってしまうわけですが、
終わらせずに監視を続け、10秒おきにシグナルが発生するようにしたいのですがどうすればいいのでしょうか?
つまりsleep100秒している間に、timeoutという文字を10秒おきに一回ずつ計10個printするようにしたいのですが。
そういうスクリプトを作って見せてもらえないでしょうか。

847:デフォルトの名無しさん
09/04/02 02:06:30
sleep(100);



system "sleep 100";

にしなさい


848:るん(pafe) ◆mB5uKa4bvY
09/04/02 05:14:44
>>847
だめでした。やっぱりtimeoutの文字は一発で終わりです。sleepは確かに100秒続くのですが。

ちなみにsystem関数で置き換えられない処理を監視する場合も可能なようにスクリプト例をお願いします。

849:デフォルトの名無しさん
09/04/02 06:11:52
>>846
sub timeout の中に
$SIG{ALRM} = \&timeout; # ALRM シグナルをキャッチした場合の処理を定義
alarm 10; # タイマーを 10 秒にセット
の部分をもう1回書いたらあかんの?

850:るん(pafe) ◆mB5uKa4bvY
09/04/02 15:25:20
>>849

$SIG{ALRM} = \&timeout; # ALRM シグナルをキャッチした場合の処理を定義
alarm 1; # タイマーを 1 秒にセット
#タイマーで時間を監視したい処理
system "sleep 10";
alarm 0; # タイマーをキャンセル

sub timeout {
#タイムアウトした際に実行する処理
print 'timeout';
alarm 1; # タイマーを 1 秒にセット
}

こうもしてみたけどやっぱりダメでした。やはりtimeoutは一発出ただけですたい。

851:デフォルトの名無しさん
09/04/02 16:03:29
$SIG{ALRM} = \&timeout;
alarm 1;
sleep 10;
alarm 0;

sub timeout {
print "timeout\n";
$SIG{ALRM} = \&timeout;
alarm 1;
}

852:デフォルトの名無しさん
09/04/02 16:39:59
ブログではなく、自身のホームページにコメント欄を設置したいのですが、
コメントを送信したら自動的にhtmlに上書きされてページがリロードされるような
プログラムはどのように書けば良いですか?

考え方を教えていただければ自分で勉強しながら作ってみようと思いますので
どうかよろしくお願いします。

853:デフォルトの名無しさん
09/04/02 16:42:04
スレ間違えました。別のスレで質問しますので、取り下げます。

854:るん(pafe) ◆mB5uKa4bvY
09/04/02 18:35:31
>>847
>>849
>>851
すみませんでした!!
どうしようもないボケミスをしてたようです。
subルーチンの中にそのまま

sub timeout {
#タイムアウトした際に実行する処理
}

を書き込んでいたため、どうやっても一回しか出なかったようです。
凡ミスで失礼しました。
確かに10発出ます。
こんな間違いしててもperlは走るところが恐ろしいね(^^;
一緒に考えてくれてありがとう! ミスが見つかったので助かりました。

855:デフォルトの名無しさん
09/04/02 19:12:36
ファイルロックのやり方調べたら結構いろんな例があるんですけど、どんなのが1番ファイルが壊れにくいですか?
自分はこんなの使ってるってのでもいいんで、教えてください。

856:デフォルトの名無しさん
09/04/02 20:01:05
>>855
【Perl】ファイルロック(排他処理)について語ろう
スレリンク(php板)


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch