Perl Script(WSH)サンプル

1.「Hello World!」の表示

- vbs-
Msgbox("Hello World!")
- pls -
$WScript->Echo("Hello World!");

2.ドラッグ&ドロップされたファイルの表示

- vbs -
Set Arg = WScript.Arguments
If Arg.Count > 0 Then
  For Each str In Arg
    MsgBox str
  Next
End If
- pls(wsf) -
<Job ID="DragDrop">
<script language=PerlScript>
     $arg = $WScript->{Arguments};
  $count = $arg->{Count};

  for($i = 0; $i < $count; $i++) {
    $WScript->Echo($arg->Item($i));
  }
</script>
</Job>
WSH2.0で新たに、ファイルのドラッグアンドドロップが可能になりましたが、VBS、JS、WSH、WSFファイルでしか機能しないようです。なので、XMLフォーマットによるWSFファイルで表記しています。

3.メモ帳の起動と文字の入力

- vbs -
Set WSHShell = WScript.CreateObject("WScript.Shell")
WSHShell.Run "notepad"

message = "Hello from VBScript!" & vbCr

for i = 1 to len(message)
  char = mid(message, i, 1)
  WScript.Sleep(100)
  WSHShell.SendKeys char
next
- pls -
$WshShell = $WScript->CreateObject("WScript.Shell");
$WshShell->Run("notepad");

$message = "Hello from PerlScript!";

for($i=0; $i < length($message); $i++) {
  $char = substr($message, $i, 1);
  $WScript->Sleep(100);
  $WshShell->SendKeys($char);
}

4.ファイル全体を読み込んで表示する

- vbs -
Set objFs = WScript.CreateObject("Scripting.FileSystemObject")
Set objText = objFs.OpenTextFile("hoge.txt")

str = objText.ReadAll
objText.Close
MsgBox(str)
- pls -
open(IN, "hoge.txt"); @lines = <IN> close(IN);
$WScript->Echo(@lines);

5.複数のスクリプトエンジンを使った記述

- wsf -
<Job ID="count">
<script language="VBScript">
  msgbox("123")
</script>

<script language="JavaScript">
  WScript.Echo("456");
</script>

<script language="PerlScript">
  $WScript->Echo("789");
</script>
</Job>
- wsf -
<Job ID="email">
<script language="PerlScript">
  sub address{
    local($addr) = @_;
    local($ret) = false;
    if($addr =~ /^[\w\.\-]+\@[\w\-]+\.[\w\-\.]+$/){
      $ret = true;
    }
    return $ret;
  }
</script>

<script language="VBScript">
  element = InputBox("MailAddress Check!")
  ans = address(element)
  if ans = "true" then
    wer = "正しいアドレスです。"
  else
    wer = "誤りがあります。"
  end if
  msgbox(wer)
</script>
</Job>