For this:
Suggestions and comments welcome (including spelling, grammatical and stylistic corrections :)
Score | |
---|---|
sh | 151 |
Ruby | 148 |
Perl | 147 |
Ch | 132 |
Python | 124 |
PHP | 120 |
Pike | 114 |
Scala | 112 |
Tcl | 111 |
JudoScript | 109 |
Awk | 108 |
REXX | 101 |
merd | 101 |
OCaml | 99 |
E | 99 |
CommonLisp | 99 |
Lua | 96 |
Scheme | 94 |
D | 94 |
Erlang | 89 |
JavaScript | 86 |
Haskell | 83 |
VBScript | 83 |
Prolog | 82 |
JScheme | 74 |
C | 68 |
Smalltalk | 63 |
Java | 14 |
C# | 8 |
conflict of interest warning: the author of this page is also the author of merd, so some things may be unintentionally subconsciously biased.
merd is mostly vapourware and a dead project.
Implementation | compilation and execution in one command (20 points) | shebang aware (#!) (15 points) | program can be passed on command line (5 points) | interactive interpreter (REPL) (5 points) | debugger (5 points) | full interpreter in debugger (5 points) | execution tracer (a la "sh -x") (2 points) | Score | |
---|---|---|---|---|---|---|---|---|---|
sh | bash 2.05 |
X | X | X | X | X | 47 | ||
Ruby | Ruby 1.6.7 |
X | X | X | X | X | X | X | 57 |
Perl | Perl 5.6.0 |
X | X | X | X | X | X | X | 57 |
Ch | Ch 4.0 |
X | X | X | X | X | X | 55 | |
Python | CPython 2.4 |
X | X | X | X | X | X | X | 57 |
PHP | PHP 5 |
X | X | X | X | 45 | |||
Pike | Pike 7.5.1 |
X | X | X | X | X | 47 | ||
Scala | Scala 2.8.0 and Sun JVM 6 |
X | X | X | X | X | 50 | ||
Tcl | Tcl 8.3 |
X | X | X | 40 | ||||
JudoScript | JudoScript 0.9 |
X | X | 35 | |||||
Awk | gawk 3.1.1 |
X | X | X | 40 | ||||
REXX | Regina 3.3 |
X | X | X | 37 | ||||
merd | X | X | X | X | 45 | ||||
OCaml | OCaml 3.07 + Extlib 1.1 |
X | X | X | X | 45 | |||
E | X | X | X | X | 45 | ||||
CommonLisp | sbcl 1.0.45 |
X | X | X | X | X | X | X | 57 |
Lua | Lua 4.0 |
X | X | X | X | 45 | |||
Scheme | guile 1.4 |
X | X | X | X | 45 | |||
D | DMD 2.050 |
X | X | X | X | 45 | |||
Erlang | sae-r9b-1 |
X | X | X | X | X | X | 55 | |
JavaScript | NJS 0.2.5 |
X | X | X | 40 | ||||
Haskell | ghc 6.6 |
X | X | X | X | 45 | |||
VBScript | VBScript |
X | X | X | X | X | 50 | ||
Prolog | SWI-Prolog 5.6.x |
X | X | X | X | X | 50 | ||
JScheme | X | X | 35 | ||||||
C | tcc 0.9.12 |
X | X | X | 40 | ||||
Smalltalk | GNU Smalltalk 1.95 |
X | X | 25 | |||||
Java | gcj 3.2 |
X | 5 | ||||||
C# | mono 0.15 |
0 |
(contiguous spaces count as one character)
(the length of the "smallest" program is partially removed in the length of other programs)
smallest | hello world | argv | env | test file exists | test file readable | formatting | system | sed in place | compile what must be | grep | Score | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
sh | 0 | 16 | 7 | 10 | 16 | 16 | 37 | 44 | 22 | 143 | 248 | 104 |
Ruby | 0 | 18 | 12 | 16 | 30 | 30 | 39 | 65 | 24 | 136 | 272 | 91 |
Perl | 0 | 21 | 18 | 20 | 24 | 24 | 45 | 60 | 16 | 176 | 237 | 90 |
Ch | 0 | 20 | 17 | 10 | 23 | 23 | 36 | 77 | 93 | 255 | TD | 77 |
Python | 0 | 19 | 29 | 35 | 57 | 54 | 37 | 96 | 88 | 262 | 513 | 67 |
PHP | 0 | 12 | 28 | 20 | 39 | 39 | 52 | 76 | 100 | 255 | 386 | 75 |
Pike | 0 | 20 | 14 | 16 | 30 | 39 | 49 | 82 | 171 | 326 | TD | 67 |
Scala | 0 | 22 | 16 | 29 | 49 | 50 | 61 | 168 | 126 | 261 | 620 | 62 |
Tcl | 0 | 18 | 21 | 15 | 36 | 38 | 49 | 80 | 158 | 245 | 675 | 71 |
JudoScript | 0 | 16 | 11 | 8 | 32 | 34 | 26 | 61 | 71 | TD | TD | 74 |
Awk | 0 | 29 | 23 | 31 | 48 | 48 | 47 | 88 | 159 | 206 | 388 | 68 |
REXX | 0 | 17 | 10 | 27 | 46 | 37 | 37 | 106 | 331 | 464 | 883 | 64 |
merd | 0 | 21 | 20 | 24 | 46 | 39 | 39 | 70 | TD | TD | TD | 56 |
OCaml | 0 | 27 | 26 | 32 | 47 | 41 | 62 | 96 | 175 | 669 | 831 | 54 |
E | 0 | 22 | 28 | 77 | 34 | 35 | 52 | 206 | 160 | 408 | TD | 54 |
CommonLisp | 0 | 26 | 34 | 34 | 55 | 86 | 59 | 181 | 308 | 694 | 1065 | 42 |
Lua | 0 | 19 | 13 | 19 | TD | 50 | 50 | 77 | TD | TD | TD | 51 |
Scheme | 0 | 25 | 38 | 34 | 33 | 33 | 61 | 103 | TD | TD | TD | 49 |
D | 14 | 55 | 73 | 70 | 60 | 52 | 77 | 120 | 111 | 230 | 394 | 49 |
Erlang | 14 | 39 | 43 | 51 | 86 | 88 | 67 | 129 | 292 | 779 | TD | 34 |
JavaScript | 0 | 29 | 27 | 41 | 51 | 52 | 55 | 91 | TD | TD | TD | 46 |
Haskell | 16 | 29 | 55 | 48 | 93 | 70 | 82 | 148 | 222 | 427 | TD | 38 |
VBScript | 0 | 26 | 33 | 92 | 105 | 129 | 53 | 145 | TD | TD | TD | 33 |
Prolog | 5 | 33 | 95 | 46 | 54 | 60 | 82 | 147 | 780 | 626 | TD | 32 |
JScheme | 0 | 25 | 12 | 348 | 64 | 66 | 52 | TD | 318 | 719 | 927 | 39 |
C | 20 | 61 | 84 | 83 | 65 | 65 | 93 | 117 | 367 | TD | TD | 28 |
Smalltalk | 0 | 25 | 39 | 38 | 62 | 66 | 98 | 114 | TD | TD | TD | 38 |
Java | 68 | 107 | 115 | 107 | 129 | 132 | 143 | 399 | 511 | 754 | TD | 9 |
C# | 41 | 86 | 107 | 114 | 107 | 157 | 116 | 388 | TD | TD | TD | 8 |
sh | <empty> |
Ruby | <empty> |
Perl | <empty> |
Ch | <empty> |
Python | <empty> |
PHP | <empty> |
Pike | <empty> |
Scala | <empty> |
Tcl | <empty> |
JudoScript | <empty> |
Awk | <empty> |
REXX | <empty> |
merd | <empty> |
OCaml | <empty> |
E | <empty> |
CommonLisp | <empty> |
Lua | <empty> |
Scheme | <empty> |
D | void main() {} |
Erlang | main(_) -> ok |
JavaScript | <empty> |
Haskell | main = putStr "" |
VBScript | <empty> |
Prolog | main. |
JScheme | <empty> |
C | main() { return 0; } |
Smalltalk | <empty> |
Java | public class smallest { public static void main(String[] args) { } } |
C# | class smallest { static void Main() { } } |
sh | echo Hello World |
Ruby | puts "Hello World" |
Perl | print "Hello World\n" |
Ch | puts("Hello World"); |
Python | print "Hello World" |
PHP | Hello World |
Pike | return "Hello World" |
Scala | println("Hello World") |
Tcl | puts "Hello World" |
JudoScript | . "Hello World"; |
Awk | BEGIN { print "Hello World" } |
REXX | say "Hello World" |
merd | "Hello World".println |
OCaml | print_endline "Hello World" |
E | println("Hello World") |
CommonLisp | (format t "Hello world~%") |
Lua | print "Hello world" |
Scheme | (display "Hello World\n") |
D | import std.stdio; void main() { write("Hello World"); } |
Erlang | main(_) -> io:fwrite("hello world\n"). |
JavaScript | System.print("Hello World\n") |
Haskell | main = putStrLn "Hello World" |
VBScript | Wscript.echo "Hello World" |
Prolog | main :- write('Hello World'), nl. |
JScheme | (display "Hello World\n") |
C | #include <stdio.h> main() { puts("Hello World"); return 0; } |
Smalltalk | 'Hello World' displayNl ! |
Java | public class hello_world { public static void main(String[] args) { System.out.println("Hello World"); } } |
C# | class hello_world { static void Main() { System.Console.WriteLine("Hello World"); } } |
sh | echo $1 |
Ruby | puts ARGV[0] |
Perl | print "$ARGV[0]\n" |
Ch | echo $(_argv[1]); |
Python | import sys; print sys.argv[1] |
PHP | <?= "{$_SERVER[argv][1]}\n"; |
Pike | return argv[0] |
Scala | println(args(0)) |
Tcl | puts [lindex $argv 0] |
JudoScript | . $args[0]; |
Awk | BEGIN { print ARGV[1] } |
REXX | say ARG(1) |
merd | Sys::args[0].println |
OCaml | print_endline Sys.argv.(1) |
E | println(interp.getArgs()[0]) |
CommonLisp | (write-line (second *posix-argv*)) |
Lua | print(arg[1]) |
Scheme | (format #t "~A\n" (cadr command-line)) |
D | import std.stdio; void main(string[] a) { if(a.length>1) writeln(a[1]); } |
Erlang | main([Arg|_]) -> io:format("~s~n", [Arg]). |
JavaScript | System.print(ARGS[1], "\n") |
Haskell | import System main = do l <- getArgs putStrLn (head l) |
VBScript | Wscript.echo Wscript.Arguments(0) |
Prolog | main :- current_prolog_flag(argv, CmdLine), append(_, [--, Arg1|_], CmdLine), write(Arg1), nl. |
JScheme | (print ARGS) |
C | #include <stdio.h> main(int n, char **argv) { if (n > 1) puts(argv[1]); return 0; } |
Smalltalk | (Smalltalk arguments) at: 1 displayNl ! |
Java | public class argv { public static void main(String[] args) { if (args.length > 0) System.out.println(args[0]); } } |
C# | class argv { static void Main(string[] args) { if (args.Length > 0) System.Console.WriteLine(args[0]); } } |
sh | echo $HOME |
Ruby | puts ENV["HOME"] |
Perl | print "$ENV{HOME}\n" |
Ch | echo $HOME |
Python | import os; print os.environ["HOME"] |
PHP | <?= "$_ENV[HOME]\n"; |
Pike | return env->HOME |
Scala | println(System getenv "HOME") |
Tcl | puts $env(HOME) |
JudoScript | . #home; |
Awk | BEGIN { print ENVIRON["HOME"] } |
REXX | say VALUE("HOME", , SYSTEM) |
merd | Sys::env{"HOME"}.println |
OCaml | print_endline(Sys.getenv "HOME") |
E | # Only when run on Java1.5 println(<unsafe:java.lang.System>.getenv("HOME")) |
CommonLisp | (write-line (posix-getenv "HOME")) |
Lua | print(getenv"HOME") |
Scheme | (format #t "~A\n" (getenv "HOME")) |
D | import std.stdio,std.process; void main() { writeln(getenv("HOME")); } |
Erlang | main(_) -> io:format("~s~n", [os:getenv("HOME")]). |
JavaScript | System.print(System.getenv("HOME"), "\n") |
Haskell | import System main = getEnv "HOME" >>= putStrLn |
VBScript | Set s = WScript.CreateObject("WScript.Shell") Wscript.echo s.Environment("PROCESS")("HOME") |
Prolog | main :- getenv('HOME', Home), write(Home), nl. |
JScheme | (load "using/run.scm") (define getvar (let ((table (Properties.))) (for-each* (lambda (r) (let ((it (.split r "="))) (.put table (vector-ref it 0) (vector-ref it 1)))) (BufferedReader (inputReader (if (.startsWith ( os.name") "Windows") (run (cmd cmd /c set)) (run (cmd /bin/sh set)))))) (lambda (name) (.get table name)))) (print (getvar "HOME")) |
C | #include <stdlib.h> main() { char *s = getenv("HOME"); if (s) puts(s); return 0; } |
Smalltalk | (Smalltalk getenv: 'HOME') displayNl ! |
Java | public class env { public static void main(String[] args) { System.out.println(System.getenv("HOME")); } } |
C# | using System; class env { static void Main() { Console.WriteLine(Environment.GetEnvironmentVariable("HOME")); } } |
sh | [ -e /etc/mtab ] |
Ruby | test ?e, "/etc/mtab" or exit 1 |
Perl | -e "/etc/mtab" or exit 1 |
Ch | access("/etc/mtab", 0); |
Python | import os, sys sys.exit(not os.path.exists("/etc/mtab")) |
PHP | <? file_exists("/etc/mtab") or exit(1); |
Pike | return !file_stat("/etc/mtab") |
Scala | if(!new java.io.File("/etc/mtab").exists) exit(1) |
Tcl | exit [expr ![file exists /etc/mtab]] |
JudoScript | exit(!"/etc/mtab".fileExists()); |
Awk | BEGIN { if (system("[ -e /etc/mtab ]")) exit 1 } |
REXX | exit STREAM(ARG(1), 'C', 'QUERY EXISTS') == "" |
merd | Sys::exit(1) if not File::exists?("/etc/mtab") |
OCaml | if not(Sys.file_exists "/etc/mtab") then exit 1 |
E | require(<file:/etc/mtab>.exists()) |
CommonLisp | (unless (probe-file "/etc/mtab") (quit :unix-status 1)) |
Scheme | (exit (access? "/etc/mtab" F_OK)) |
D | import std.file; int main() { return !exists("/etc/mtab"); } |
Erlang | main(_) -> case filelib:is_file("/etc/mtab") of true -> ok; _ -> erlang:halt(1) end. |
JavaScript | if (!new File("/etc/mtab").exists()) System.exit(1) |
Haskell | import Directory import System main = catch (getPermissions "/etc/mtab") (\_ -> exitFailure) |
VBScript | Set f = CreateObject("Scripting.FileSystemObject") if not f.FileExists("/etc/mtab") then wscript.quit(1) |
Prolog | main :- exists_file('/etc/mtab') -> halt(0) ; halt(1). |
JScheme | (if (not (.exists (java.io.File. "/etc/mtab"))) (System.exit 1)) |
C | #include <unistd.h> main() { return access("/etc/mtab", F_OK); } |
Smalltalk | (File exists: '/etc/mtab') ifFalse: [ ObjectMemory quit: 1 ] ! |
Java | public class exists { public static void main(String[] args) { if(!(new java.io.File("/etc/mtab")).exists()) System.exit(1); } } |
C# | public class exists { static int Main() { return (new System.IO.FileInfo("/etc/mtab")).Exists ? 0 : 1; } } |
sh | [ -r /etc/mtab ] |
Ruby | test ?r, "/etc/mtab" or exit 1 |
Perl | -r "/etc/mtab" or exit 1 |
Ch | access("/etc/mtab", 4); |
Python | import sys try: open("/etc/mtab") except: sys.exit(1) |
PHP | <? is_readable("/etc/mtab") or exit(1); |
Pike | return !!catch(Stdio.File("/etc/mtab")) |
Scala | if(!new java.io.File("/etc/mtab").canRead) exit(1) |
Tcl | exit [expr ![file readable /etc/mtab]] |
JudoScript | exit(!"/etc/mtab".fileReadable()); |
Awk | BEGIN { if (system("[ -r /etc/mtab ]")) exit 1 } |
REXX | exit \STREAM(ARG(1), 'C', 'READABLE') |
merd | File::open("/etc/mtab") or Sys::exit(1) |
OCaml | try open_in("/etc/mtab") with _ -> exit 1 |
E | require(<file:/etc/mtab>.canRead()) |
CommonLisp | (require :sb-posix) (unless (sb-posix:access "/etc/mtab" r-ok) (quit :unix-status 1)) |
Lua | if not openfile("/etc/mtab", "r") then exit(1) end |
Scheme | (exit (access? "/etc/mtab" R_OK)) |
D | import std.stdio; void main() { File("/etc/mtab"); } |
Erlang | main(_) -> case file:read_file("/etc/mtab") of {ok, _} -> ok; _ -> erlang:halt(1) end. |
JavaScript | if (!new File("/etc/mtab").open("r")) System.exit(1) |
Haskell | import System main = catch (readFile "/etc/mtab") (\_ -> exitFailure) |
VBScript | On Error Resume Next Set f = CreateObject("Scripting.FileSystemObject") if f.GetFile("file2.txt") = Nothing then wscript.quit(1) |
Prolog | main :- access_file('/etc/mtab', read) -> halt(0) ; halt(1). |
JScheme | (if (not (.canWrite (java.io.File. "/etc/mtab"))) (System.exit 1)) |
C | #include <unistd.h> main() { return access("/etc/mtab", R_OK); } |
Smalltalk | (File isReadable: '/etc/mtab') ifFalse: [ ObjectMemory quit: 1 ] ! |
Java | public class readable { public static void main(String[] args) { if(!(new java.io.File("/etc/mtab")).canRead()) System.exit(1); } } |
C# | public class readable { static int Main() { try { (new System.IO.FileInfo("/etc/mtab")).OpenRead(); return 0; } catch(System.Exception ex) { return 1; } } } |
sh | a=1; b=2; echo "$a + $b = $[$a + $b]" |
Ruby | a=1; b=2; puts "#{a} + #{b} = #{a + b}" |
Perl | $a=1; $b=2; print "$a + $b = ", $a + $b, "\n" |
Ch | int a=1, b=2; echo $a + $b = $(a+b) |
Python | a=1; b=2; print a, '+', b ,'=', a + b |
PHP | <? $a=1; $b=2; echo "$a + $b = " . ($a + $b) . "\n"; |
Pike | int a=1, b=2; write("%d + %d = %d", a, b, a + b); |
Scala | val (a, b) = (1, 2) println(a + " + " + b + " = " + (a + b)) |
Tcl | set a 1; set b 2; puts "$a + $b = [expr $a + $b]" |
JudoScript | . a=1," + ",b=2," = ",a+b; |
Awk | BEGIN { a=1; b=2; print a " + " b " = " a + b } |
REXX | a = 1 ; b = 2 ; say a "+" b "=" a + b |
merd | a=1; b=2; "{a} + {b} = {a + b}".println |
OCaml | let a, b = 1, 2 in Printf.printf "%d + %d = %d\n" a b (a + b) |
E | def a := 1 def b := 2 println(`$a + $b = ${a + b}`) |
CommonLisp | (let ((a 1) (b 2)) (format t "~a + ~a = ~a~%" a b (+ a b))) |
Lua | a=1; b=2; print(a .. " + " .. b .. " = " .. a + b) |
Scheme | (let ((a 1) (b 2)) (format #t "~A + ~A = ~A\n" a b (+ a b))) |
D | import std.stdio; void main() { int a=1,b=2; writeln(a," + ",b," = ",a+b); } |
Erlang | main(_) -> A = 1, B = 2, io:fwrite("~p + ~p = ~p~n", [A, B, A+B]). |
JavaScript | a=1; b=2; System.print(a, " + ", b, " = ", a + b, "\n") |
Haskell | main = putStrLn $ show a ++ " + " ++ show b ++ " = " ++ show(a + b) where a=1 b=2 |
VBScript | a=1 : b=2 WScript.echo a & " + " & b & " = " & a + b |
Prolog | main :- A is 1, B is 2, Result is A + B, format('~d + ~d = ~d\n', [A, B, Result]). |
JScheme | (let ((a 1) (b 2)) (print {[a] + [b] = [(+ a b)]})) |
C | #include <stdio.h> main() { int a=1, b=2; printf("%d + %d = %d\n", a, b, a + b); return 0; } |
Smalltalk | | a b | a:=1. b:=2. (a printString, ' + ', b printString, ' = ', (a + b) printString) displayNl ! |
Java | public class formatting { public static void main(String[] args) { int a=1, b=2; System.out.println("" + a + " + " + b + " = " + (a + b)); } } |
C# | class formatting { static void Main() { int a=1, b=2; System.Console.WriteLine("{0} + {1} = {2}", a, b, a + b); } } |
sh | false || echo "false failed" 1>&2; echo done |
Ruby | system "false" or $stderr.puts "false failed"; system "echo done" |
Perl | system "false" and warn "false failed\n"; system "echo done" |
Ch | if (system("false")) fprintf(stderr, "false failed\n"); system("echo done"); |
Python | import os, sys if os.system("false"): sys.stderr.write("false failed\n") os.system("echo done") |
PHP | <? system("false") or fwrite(STDERR, "false failed\n"); system("echo done"); |
Pike | Process.system("false") && werror("false failed\n"); Process.system("echo done"); |
Scala | def exec = Runtime.getRuntime.exec(_:String) if (exec("false").waitFor > 0) error("false failed") new io.BufferedSource(exec("echo done").getInputStream) foreach print |
Tcl | if {[catch {exec false}]} {puts stderr "false failed"} exec echo >@ stdout done |
JudoScript | exec <r> 'false'; if (r) . "false failed"; exec 'echo done'; |
Awk | BEGIN { if (system("false")) print "false failed" > "/dev/stderr" system("echo done") } |
REXX | address SYSTEM "false" if RC == 0 then ; call LINEOUT 'STDERR', "false failed" address SYSTEM "echo done" |
merd | Sys::system("false") or warn("false failed"); Sys::system("echo done") |
OCaml | if Sys.command "false" != 0 then prerr_endline("false failed"); ignore(Sys.command "echo done") |
E | def runFalse := makeCommand("/bin/false") def runEcho := makeCommand("/bin/echo") def ok := try { runFalse() true } catch ex { stderr.println("false failed") false } if (ok) { println(runEcho("done")[0]) } |
CommonLisp | (unless (zerop (process-exit-code (run-program "false" nil :search t))) (format *error-output* "false failed~%")) (run-program "echo" '("done") :search t :output *standard-output*) |
Lua | if execute "false" ~= 0 then _ALERT "false failed\n" end execute "echo done" |
Scheme | (if (not (= (system "false") 0)) (display "false failed\n" (current-error-port))) (system "echo done") |
D | import std.stdio,std.process; void main() { if (system("false")) stderr.writeln("false failed"); system("echo done"); } |
Erlang | main(_) -> case os:cmd("false; echo $?") of [$0|_] -> ok; _ -> io:fwrite("false failed~n") end, io:fwrite(os:cmd("echo done")). |
JavaScript | if (System.system("false") != 0) System.error("false failed\n") System.system("echo done") |
Haskell | import System import IO import Monad main = do ret <- system "false" when (ret /= ExitSuccess) (hPutStrLn stderr "false failed") system "echo done" |
VBScript | Set s = CreateObject("WScript.Shell") Set e = s.Exec("false") If e.exitCode > 0 Then wscript.stderr.writeline "false failed" s.Exec("echo done") |
Prolog | main :- shell('false', Status), (Status \= 0 -> current_stream(2, _, StdErr), format(StdErr, 'false failed~n', []) ; true), shell('echo done', _). |
C | #include <stdio.h> main() { if (system("false")) fprintf(stderr, "false failed\n"); system("echo done"); return 0; } |
Smalltalk | (Smalltalk system: 'false') = 0 ifFalse: [ stderr display: 'false failed' ; nl ]. Smalltalk system: 'echo done' ! |
Java | import java.io.*; public class system { public static void main(String[] args) throws Exception { if (Runtime.getRuntime().exec("false").waitFor() != 0) System.err.println("false failed"); BufferedReader input = new BufferedReader(new InputStreamReader( Runtime.getRuntime().exec("echo done").getInputStream() )); String line; while ((line = input.readLine()) != null) System.out.println(line); } } |
C# | using System; using System.Diagnostics; public class system { static void Main() { Process proc = new Process(); proc.EnableRaisingEvents = false; proc.StartInfo.FileName = "false"; proc.Start(); proc.WaitForExit(); if (proc.ExitCode != 0) Console.Error.WriteLine("false failed"); proc.StartInfo.FileName = "echo"; proc.StartInfo.Arguments = "done"; proc.Start(); proc.WaitForExit(); } } |
sh | sed -i -e "s/#.*//" $1 |
Ruby | % ruby -pi -e '$_.sub!(/#.*/, "")' |
Perl | % perl -pi -e "s/#.*//" |
Ch | char *tmp=tmpnam(NULL); sed 's/#.*//' < $(_argv[1]) > $tmp cp -f $tmp $(_argv[1]) rm -f $tmp |
Python | import fileinput, re for s in fileinput.input(inplace = 1): print re.sub("#.*", "", s), |
PHP | <? $f = $_SERVER[argv][1]; file_put_contents($f, preg_replace("/#.*/", '', file_get_contents($f))); |
Pike | int main(int n, array args) { array r = ({}); foreach(Stdio.read_file(args[1]) / "\n", string x) { sscanf(x, "%s#", x); r += ({x}); } Stdio.write_file(args[1], r*"\n"); } |
Scala | val i = io.Source.fromFile(args(0)).mkString val w = new java.io.FileWriter(args(0)) w write i.replaceAll("#.*\n","") w.close |
Tcl | set f [lindex $argv 0] set fd [open $f r] regsub -all {#[^\n]*\n} [read $fd] {} contents close $fd set fd [open $f w] puts -nonewline $fd $contents close $fd |
JudoScript | getFileAsString(#args[0]).replaceAll('#.*', '').writeToFile(#args[0]); |
Awk | BEGIN { if (!("mktemp /tmp/sed.XXXXXX" | getline tmp)) exit 1 } { sub("#.*", ""); print >> tmp } END { system("cp -f " tmp " " ARGV[1]) system("rm -f " tmp) } |
REXX | call rxFuncAdd 'sysLoadFuncs', 'rexxUtil', 'sysLoadFuncs' call sysLoadFuncs fin = ARG(1) ; fout = RANDOM() || ".tmp" do while LINES(fin) > 0 call LINEOUT fout, CHANGESTR("#", LINEIN(fin), "") end call STREAM fin, 'C', 'CLOSE' ; call STREAM fout, 'C', 'CLOSE' call sysFileDelete fin ; call sysMoveObject fout, fin call sysDropFuncs |
OCaml | let l = Std.input_list (open_in Sys.argv.(1)) in let f = open_out Sys.argv.(0) in List.iter (fun l -> output_string f ((Str.replace_first (Str.regexp "#.*") "" l) ^"\n")) l;; |
E | def f := <file: interp.getArgs()[0]> var text := "" for line in f { if (line =~ `@left#@right`) { text += left + "\n" } else { text += line } } f.setText(text) |
CommonLisp | (defun remove-hash-comments (path) (let ((lines (with-open-file (inf path :direction :input) (loop for line = (read-line inf nil nil) while line collect line)))) (with-open-file (ouf path :direction :output :if-exists :supersede) (dolist (line lines) (write-line (subseq line 0 (position #\# line)) ouf))))) |
D | import std.file,std.regex; void main(string[] a) { a[1].write(a[1].readText().replace(regex("#.*","g"),"")); } |
Erlang | main([F|_]) -> {ok, B} = file:read_file(F), Lines = string:tokens(erlang:binary_to_list(B), "\n"), Not_comment = fun ($#) -> false; (_) -> true end, New = lists:map( fun(Line) -> L = lists:takewhile(Not_comment, Line), L ++ "\n" end, Lines ), file:write_file(F, erlang:list_to_binary(New)). |
Haskell | import System import System.IO import Monad import Control.Exception c = unlines . map (takeWhile (/= '#')) . lines fop f n = do l <- fmap f (readFile n) evaluate (length l) writeFile n l main = getArgs >>= (fop c) . head |
Prolog | main :- getUserArg(1, File), atom_concat(File, '.tmp', TmpFile), strip_comments_from_file(File, TmpFile), delete_file(File), rename_file(TmpFile, File). strip_comments_from_file(FileIn, FileOut) :- open(FileIn, read, In, [type(binary)]), open(FileOut, write, Out, [type(binary)]), process_lines(In, Out), close(In), close(Out). process_lines(In, _) :- at_end_of_stream(In), !. process_lines(In, Out) :- read_line_to_codes(In, Line), partition(Line, 35, Prefix, _), format(Out, '~s~n', [Prefix]), !, process_lines(In, Out). partition(ListIn, Element, Prefix, Suffix) :- (member(Element, ListIn) -> append(Prefix, [Element|Suffix], ListIn) ; Prefix = ListIn, Suffix = []). getUserArg(N, Arg) :- current_prolog_flag(argv, Cmdline), append(_, [--|Args], Cmdline), nth1(N, Args, Arg). |
JScheme | (load "using/run.scm") (import "java.io.File") (let ((file (vector-ref ARGS 1))) (let ((out (File.createTempFile "foo" "bar"))) (print out) (call-with-output-file out (lambda (s) (for-each* (lambda (r) (.println s (.replaceFirst r "#.*" ""))) (BufferedReader (File. file))) (.close s))) (.renameTo out (File. file)))) |
C | #include <stdio.h> #include <unistd.h> main (int argc, char **argv) { FILE *f; int c=1, t=0, i=0; if (argc-c) { f=fopen(argv[c],"r+"); while (c) switch (c=getc(f)) { case '#' : if (!t) { t=1,i-=2; break; } case '\n' : if (t) { t=0; break; } default : if (t==1) { i--; break; } fseek(f,i-1,1); putc(c++,f); fseek(f,-i,1); } truncate(argv[1],ftell(f)+i); } return 0; } |
Java | import java.io.*; public class uncomment { public static void main(String[] args) { try { FileReader fr = new FileReader(args[0]); BufferedReader br = new BufferedReader(fr); File f = new File(args[0] + ".tmp"); FileWriter fw = new FileWriter(f); String line = ""; while ((line = br.readLine()) != null) { int pos = line.indexOf('#'); if (pos > -1) line = line.substring(0,pos); fw.write(line + '\n'); } fr.close(); fw.close(); f.renameTo(new File(args[0])); } catch(Exception ex) { ex.printStackTrace(); } } } |
sh | for c in `find -name "*.c"`; do o=`echo $c | sed 's/.c$/.o/'` if [ "$c" -nt "$o" ]; then echo "compiling $c to $o" gcc -c -o "$o" "$c" fi done |
Ruby | Dir['**/*.c'].each{|c| o = c.sub('.c$', '.o') if test ?>, c, o then puts "compiling #{c} to #{o}" system("gcc", "-c", "-o", o, c) end } |
Perl | use File::Find; find({ no_chdir => 1, wanted => sub { if (($o = $_) =~ s/\.c$/.o/ && -M $_ <= -M $o) { print "compiling $_ to $o\n"; system qw(gcc -c -o), $o, $_; } } }, '.'); |
Ch | #include <sys/stat.h> string_t c, o; struct stat cstat, ostat; foreach (c; `find / -name "*.c"`) { o=`echo $c | sed 's/.c$/.o/'`; stat(o, &ostat); stat(c, &cstat); if (ostat.st_mtime > cstat.st_mtime) { echo "compiling $c to $o"; gcc -c -o "$o" "$c"; } } |
Python | from os import * from fnmatch import * for dir, _, files in walk('.'): for f in filter(files, '*.c'): c = path.join(dir, f) o = c[0:-2] + '.o' if not path.exists(o) or stat(c)[9] > stat(o)[9]: print 'compiling', c, 'to', o system("gcc -c -o '%s' '%s'" % (o, c)) |
PHP | <? function doit($p) { foreach (glob($p . '/*', GLOB_ONLYDIR) as $d) doit($d); foreach (glob($p . '/*.c') as $c) { $o = substr($c, 0, -1) . 'o'; if (filemtime($o) < filemtime($c)) { echo "compiling $c to $o\n"; system("gcc -c -o $o $c"); } } } doit('.'); |
Pike | int main() { object i = Filesystem.Traversion("."); foreach (i; string d; string c) { if (!has_suffix(c, ".c")) continue; c = d+c; string o = c; o[-1] = 'o'; object s = file_stat(o); if (s && i->stat()->mtime < s->mtime) continue; write("compiling %s to %s\n", c, o); Process.Process(({"gcc", "-c", "-o", o, c}))->wait(); } } |
Scala | for (s <- new java.io.File(args(0)).listFiles if ""+s endsWith ".c") { val o = new java.io.File((""+s dropRight 1)+"o") if (!o.exists || o.lastModified < s.lastModified) { println("compiling "+s+" to "+o) Runtime.getRuntime.exec("gcc -c " + s + " -o " + o) } } |
Tcl | proc doit {dir} { foreach f [glob -nocomplain $dir/*] { if [file isdir $f] { doit $f } elseif { [regsub \\.c$ $f .o o] && !( [file exists $o] && [file mtime $o] > [file mtime $f] ) } { puts "compiling $f to $o" exec gcc -c -o $o $f } } } doit . |
Awk | BEGIN { while ("find -name '*.c'" | getline) { c = $0 sub(/.c$/, ".o") if (system(sprintf("[ %s -nt %s ]", c, $0)) == 0) { print "compiling", c, "to", $0 system(sprintf("gcc -c -o '%s' '%s'", $0, c)) } } } |
REXX | call rxFuncAdd 'sysLoadFuncs', 'rexxUtil', 'sysLoadFuncs' call sysLoadFuncs call sysFileTree '*.c', 'cfilelist.', 'sf' do i = 1 for cfilelist.0 cfilelist.i = WORD(cfilelist.i, 5) ofile = LEFT(cfilelist.i, LASTPOS(".c", cfilelist.i) - 1) || ".o" otime = STREAM(ofile, 'C', 'QUERY TIMESTAMP') if otime < STREAM(cfilelist.i, 'C', 'QUERY TIMESTAMP') then do say "compiling" cfilelist.i "to" ofile address SYSTEM "gcc -c -o" cfilelist.i ofile end end call sysDropFuncs |
OCaml | open Unix let listdir dir = let rec listdir_ hdir = try let s = readdir hdir in if s = "." || s = ".." then listdir_ hdir else s :: listdir_ hdir with End_of_file -> [] in let hdir = opendir dir in let l = listdir_ hdir in closedir hdir ; l let rec doit dir = List.iter (fun s -> let f = Filename.concat dir s in if (lstat f).st_kind = S_DIR then doit f else if Filename.check_suffix f ".c" then let o = Filename.chop_extension f ^ ".o" in if not (Sys.file_exists o && (stat o).st_mtime > (stat f).st_mtime) then let cmd = Printf.sprintf "gcc -c -o '%s' '%s'" o f in print_endline ("compiling " ^ f ^ " to " ^ o) ; ignore (Sys.command cmd) ) (listdir dir) ;; doit(".") |
E | def runGcc := makeCommand("c:/cygwin/bin/gcc.exe") def leaves := <import:org.erights.e.tools.files.leaves> for c in leaves(<file:.>) { if (c.getPath() =~ `@base.c`) { def tmp := <file: `$base.o`> if (!tmp.exists() || tmp.lastModified() < c.lastModified()) { println(`compiling $base.c to $base.o`) try { runGcc("-c", `$base.c`, "-o", `$base.o`) } catch ex { stderr.println(`$base.c failed with $ex`) } } } } |
CommonLisp | (defun find-files-by-type (dir type) (mapcan (lambda (path) (cond ((null (pathname-name path)) (find-files-by-type path type)) ((string= (pathname-type path) type) (list path)) (t nil))) (directory (make-pathname :name :wild :type :wild :defaults (truename dir)))))) (defun compile-older-files (dir) (dolist (c-path (find-files-by-type dir "c")) (let* ((c-name (namestring c-path)) (o-path (make-pathname :type "o" :defaults c-path)) (o-name (namestring o-path))) (when (or (not (probe-file o-path)) (< (file-write-date o-path) (file-write-date c-path))) (format t "Compiling ~a to ~a~%" c-name o-name) (run-program "gcc" (list "-c" "-o" o-name c-name) :output *standard-output* :search t))))) |
D | import std.stdio,std.file,std.process; void main() { foreach (c; listdir("","*.c")) { auto o = c[0..$-1]~'o'; if (lastModified(o,0) < lastModified(c)) { writeln("compiling "~c~" to "~o); system("gcc -c -o '"~c~"' '"~o~"'"); } } } |
Erlang | main(_) -> Fun = fun (Cfile, Acc) -> [$c | File] = lists:reverse(Cfile), Ofile = lists:reverse([$o | File]), case is_compile_time(Cfile, Ofile) of true -> io:format("compiling ~s to ~s~n", [Cfile, Ofile]), os:cmd(io_lib:format("gcc -c -o ~s ~s~n", [Ofile, Cfile])), [Ofile | Acc]; false -> Acc end end, Regexp = regexp:sh_to_awk("*.c"), cc_recurse('.', Regexp, Fun). is_compile_time(C, O) -> case filelib:is_file(O) of true -> filelib:last_modified(C) > filelib:last_modified(O); false -> true end. cc_recurse(Directory, Regexp, CC_Fun) -> catch filelib:fold_files(Directory, Regexp, false, CC_Fun, []), {ok, Files} = file:list_dir(Directory), lists:foreach( fun (Subdir) -> cc_recurse(Subdir, Regexp, CC_Fun) end, lists:filter(fun (File) -> filelib:is_dir(File) end, Files) ). |
Haskell | import System import System.IO import System.Directory import Data.List import Control.Monad gmt = getModificationTime op f = do catch (do ct <- gmt f; ot <- gmt o; when (ct > ot) comp) (\_ -> comp) where o = take (length f - 2) f ++ ".o" comp = do putStrLn ("Compiling "++f++" to "++o) system ("gcc -c -o "++o++" "++f) main = do files <- getCurrentDirectory >>= getDirectoryContents mapM_ op $ filter (".c"`isSuffixOf`) files |
Prolog | main :- expand_file_name('*.c', CFiles), forall(member(CFile, CFiles), (sub_atom(CFile, 0, _, 2, BaseName), atom_concat(BaseName, '.o', ObjFile), (should_compile(CFile, ObjFile) -> compile(CFile, ObjFile) ; true))). should_compile(SrcFile, ObjFile) :- (exists_file(ObjFile) -> time_file(SrcFile, SrcTime), time_file(ObjFile, ObjTime), ObjTime < SrcTime ; true). compile(SrcFile, ObjFile) :- concat_atom(['gcc -c "', SrcFile, '" -o "', ObjFile, '"'], '', Cmd), format('compiling ~w to ~w\n', [SrcFile, ObjFile]), trap(Cmd, _). trap(Cmd, Output) :- open(pipe(Cmd), read, Input), read_line_to_codes(Input, Output), close(Input). |
JScheme | (import "java.io.File") (define (s->o srcDir classDir fromtype totype) ;; Source file to object file converter. (lambda (file) (let ((f (.toString (relativize srcDir file)))) (File. classDir (string-append (.substring f 0 (- (.length f) (.length fromtype))) totype))))) (define (needsUpdate? s->o) (lambda (jf) ;; Does .java file jf need to be recompiled? (let ((cf (s->o jf))) (or (not (.exists cf)) (<= (.lastModified cf) (.lastModified jf)))))) (let* ((dir (java.io.File. ".")) (s->o (s->o dir dir ".c" ".o")) (update? (needsUpdate? s->o))) (for-each (lambda (c) (if (update? c) (let ((o (s->o c))) (display {compiling [c] to [o]\n}) (out (run (cmd gcc -c -o ,c ,o)))))) (files* (java.io.File. ".") (isFile ".c")))) |
Java | import java.io.*; public class compile { public static void main(String[] args) { filter ft = new filter(); if (args.length > 0) { File f = new File(args[0]); File[] cs = f.listFiles(ft); for (int i = 0; i < cs.length; i++) tryFile(cs[i]); } } static void tryFile(File c) { String o = c.toString().replaceAll(".c$", ".o"); File tmp = new File(o); if (!tmp.exists() || tmp.lastModified() < c.lastModified()) { System.out.println("compiling " + c.toString() + " to " + o); String cmd = "gcc -c " + c.toString() + " -o " + o; try { java.lang.Runtime.getRuntime().exec(cmd); } catch(Exception ex) { ex.printStackTrace(); } } } } class filter implements FileFilter { public filter() { } public boolean accept(File f) { return f.toString().endsWith(".c"); } } |
sh | opts='' while [ -n "$1" ]; do case $1 in -i) opts="-i $opts" ;; -F) opts="-F $opts" ;; -h) h=1 ;; *) break ;; esac shift done if [ $# = 0 ] || [ -n "$h" ]; then echo "usage: grep [-F] [-i] regexp [files...]" exit 1 fi r=$1 shift grep $opts $r "$@" |
Ruby | require 'getopts' getopts('Fih') ARGV.empty? || $OPT_h and (puts "usage: grep [-F] [-i] regexp [files...]"; exit 1) r = ARGV.shift r = Regexp.quote(r) if $OPT_F r = /#{r}/i if $OPT_i prefix = ARGV.size > 1 while gets print prefix ? "#{ARGF}:" : '', $_ if $_ =~ /#{r}/ end |
Perl | use Getopt::Std; getopts('Fih', \%h); !@ARGV || $h{h} and die "usage: grep [-F] [-i] regexp [files...]\n"; $r = ($h{i} && '(?i)') . shift; $r = "\Q$r" if $h{F}; $prefix = @ARGV > 1; while (<>) { print $prefix && "$ARGV:", $_ if /$r/o; } |
Python | import getopt, sys, fileinput, re opts, args = getopt.getopt(sys.argv[1:], 'hiF') opts = [ x[0] for x in opts ] if not args or '-h' in opts: print >> sys.stderr, "usage: grep [-F] [-i] regexp [files...]" sys.exit(1) r, files = args[0], args[1:] if '-F' in opts: r = re.sub("\W", lambda i: "\\" + i.group(0), r) if '-i' in opts: re = re.compile(r, re.I) else: re = re.compile(r) for s in fileinput.input(files): prefix = "" if len(files) > 1: prefix = fileinput.filename() + ":" if re.search(s): print prefix + s, |
PHP | <? $args = array_slice($_SERVER[argv], 1); while ($o = array_shift($args)) { if (ereg('^-[ihF]$', $o)) $$o{1} = $o{1}; else break; } if (!$o || @$h) die("usage: grep [-F] [-i] regexp [files...]\n"); if (empty($args)) $args []= 'php://stdin'; $r = $F ? preg_quote($o, '/') : $o; foreach ($args as $f) { foreach (preg_grep("/$r/$i", file($f)) as $l) echo count($args) > 1 ? "$f:$l" : $l; |
Scala | val options = "-([hiF]+)".r val (optList, pattern :: files) = args.toList span (options.pattern matcher _ matches) val opts = optList.map{ case options(x) => x }.mkString.toSet if (args.isEmpty || opts('h')) { println("usage: grep [-F] [-i] regexp [files...]") exit(1) } val mods = Map('i' -> ("(?i)" + _), 'F' -> (java.util.regex.Pattern.quote(_))) .filterKeys(opts) .withDefaultValue((x: String) => x) val regex = mods('i')(mods('F')(pattern)).r files foreach { file => io.Source fromFile file getLines () foreach { line => regex findFirstIn line foreach { _ => if (files.size > 1) print(file+":") println(line) } } } |
Tcl | set i 0 set F 0 set ind 0 set usage 1 foreach s $argv { if { "$s" == "-i" } { set i 1 } elseif { "$s" == "-F" } { set F 1 } elseif { "$s" == "-h" } { incr usage } { incr usage -1 break } incr ind } if $usage { puts stderr {usage: grep [-F] [-i] regexp [files...]} exit 1 } set re [lindex $argv $ind] incr ind set files [lrange $argv $ind end] if $i { set re (?i)$re } if $F { set re (?q)$re } set nb [llength $files] proc grep { prefix fd re } { while {[gets $fd s] >= 0} { if [regexp $re $s] { puts $prefix$s } } } if { $nb == 0 } { grep "" stdin $re } { set prefix "" foreach f $files { if { $nb > 1 } { set prefix $f: } set fd [open $f] grep $prefix $fd $re close $fd } } |
Awk | function usage() { print "usage: grep [-F] [-i] regexp [files...]" > "/dev/stderr" exit 1 } BEGIN { for (i = 1; i < ARGC; i++) { s = ARGV[i] ARGV[i] = "" if (s == "-h") usage() else if (s == "-i") IGNORECASE = 1 else if (s == "-F") F = 1 else break } if (i == ARGC) usage() re = s prefix = i + 2 < ARGC } { if (F ? index($0, re) : match($0, re)) print (prefix ? (FILENAME ":") : "") $0 } |
REXX | call rxFuncAdd 'reLoadFuncs', 'rexxRE', 'reLoadFuncs' call reLoadFuncs cmdline = ARG(1) ; opt = "" ; regexp = "" ; filelist = "" do while cmdline <> "" parse var cmdline token cmdline if LEFT(token, 1) == "-" then if TRANSLATE(token) == "-H" | VERIFY(token, "-iF") \= 0 then call usage ; else ; opt = opt || CHANGESTR("-", token, "") else ; if regexp == "" then regexp = token else filelist = filelist token end /* 'F' not recognised by 'reComp'; just remove it */ opt = CHANGESTR("F", opt, "") if POS("i", opt) > 0 then ; opt = "" ; else ; opt = "c" cre = reComp(regexp, opt) do while filelist <> "" parse var filelist file filelist do while LINES(file) > 0 if reExec(cre, LINEIN(file), 'match.') then call LINEOUT , file || ":" || match.!match end end call reFree cre ; call reDropFuncs ; exit 0 usage : say "usage: grep [-h] | [-F|-i] regexp [files...]" call reDropFuncs ; exit 1 |
OCaml | open List let rec iter_lines f fd = try f (input_line fd) ; iter_lines f fd with End_of_file -> () let _ = let i, fixed, usage = ref false, ref false, ref false in Arg.parse [ "-i", Arg.Set i, "" ; "-F", Arg.Set fixed, "" ; "-h", Arg.Set usage, "" ; ] (fun _ -> ()) "" ; match filter (fun s -> s.[0] <> '-') (Array.to_list Sys.argv) with | _ :: r :: files when not !usage -> let r = if !fixed then Str.quote r else r in let re = (if !i then Str.regexp_case_fold else Str.regexp) r in let prefix = length files > 1 in iter (fun (name, fd) -> iter_lines (fun s -> try let _ = Str.search_forward re s 0 in print_endline ((if prefix then name ^ ":" else "") ^ s) with Not_found -> () ) fd ) (if files = [] then ["", stdin] else map (fun s -> s, open_in s) files) | _ -> prerr_endline "usage: grep [-F] [-i] regexp [files...]" ; exit 1 |
CommonLisp | (require :asdf) (require :cl-ppcre) (defun grep (pattern files &key (no-case nil) (fixed-strings nil)) (let ((scanner (cl-ppcre:create-scanner (if fixed-strings (cl-ppcre:quote-meta-chars pattern) pattern) :case-insensitive-mode no-case)) (prefix-p (> (length files) 1))) (dolist (path files) (with-open-file (inf path :direction :input) (loop for line = (read-line inf nil nil) while line when (cl-ppcre:scan scanner line) do (format t "~@[~a:~]~a~%" (when prefix-p (pathname-name path)) line)))))) (defun parse-args (argv) (let ((flags nil) (args nil)) (dolist (arg argv) (if (eql (char arg 0) #\-) (push arg flags) (push arg args))) (values (nreverse flags) (nreverse args)))) (multiple-value-bind (flags args) (parse-args (rest *posix-argv*)) ;; Handle help flag (when (or (null args) (member "-h" flags :test #'string=)) (format *error-output* "Usage: grep [-h] [-i] [-F] <pattern> <path> ...~%") (quit :unix-status 1)) ;; Do grep (grep (first args) (rest args) :no-case (member "-i" flags :test #'string=) :fixed-strings (member "-F" flags :test #'string=))) |
D | import std.stdio,std.regex,std.getopt; int main(string[] a) { bool h,F,i; getopt(a,"h",&h,"F",&F,"i",&i); if (a.length<2 || h) { writeln("usage: grep [-F] [-i] regexp [files...]"); return 1; } auto e = F ? a[1].replace(regex(r"\W","g"),r"\$&") : a[1]; foreach (f; a[2..$]) foreach (l; File(f).byLine()) if (!l.match(regex(e, i ? "i" : "")).empty) writeln(a.length>3 ? f~':'~l : l); return 0; } |
JScheme | (load "using/run.scm") (define (any p xs) (and (pair? xs) (or (p (car xs)) (any p (cdr xs))))) (define (forLines f files) (for-each (lambda (file) (for-each* f (BufferedReader (File. file)))) files)) (define (show x) (display x) (newline)) (define (grep-F -i re files) (let ((lines (vector->list (.split re "\n"))) (f (if -i .equalsIgnoreCase .equals))) (forLines (lambda (r) (if (any (lambda (p) (f p r)) lines) (show r))) files))) (define (grep re files) (let ((p (Pattern.compile re))) (forLines (lambda (r) (if (.find (.matcher p r)) (show r))) files))) (let* ((args (cdr (vector->list ARGS))) (-F (member "-F" args)) (-i (member "-i" args)) (-h (member "-h" args)) (args (filter (lambda (a) (not (.startsWith a "-"))) args)) (re (if -i {[(?i)][(car args)]} (car args))) (files (cdr args))) (cond ((or -h (null? args)) (display {usage: grep [-F] [-i] regexp file ...\n})) (-F (grep-F -i re files)) (else (grep re files)))) |
sh | sh |
Ruby | ruby |
Perl | perl |
Ch | ch |
Python | python |
PHP | php |
Tcl | tclsh |
REXX | rexx |
merd | merd |
E | rune - |
CommonLisp | sbcl --noinform |
Lua | lua |
Erlang | escript |
JScheme | runscheme |
sh | sh -c %s |
Ruby | ruby -e %s |
Perl | perl -e %s |
Ch | ch -c %s |
Python | python -c %s |
PHP | php -r %s |
Pike | pike -e %s |
Scala | scala -e %s |
Awk | awk %s |
merd | merd -e %s |
E | rune -src %s |
CommonLisp | sbcl --noinform -eval %s |
Lua | lua -e %s |
Scheme | guile -c %s |
D | rdmd --eval='%s' |
Erlang | erl -eval %s |
JavaScript | ngs-js -e %s |
Haskell | ghc -e %s |
sh | sh %s |
Ruby | ruby %s |
Perl | perl %s |
Ch | ch %s |
Python | python %s |
PHP | php %s |
Pike | pike %s |
Scala | scala %s |
Tcl | tclsh %s |
JudoScript | java judo %s |
Awk | awk -f %s -- |
REXX | rexx %s |
merd | merd %s |
OCaml | ocaml -I `ocamlc -where`/extlib str.cma unix.cma extLib.cma %s |
E | rune %s |
CommonLisp | sbcl --noinform -load %s |
Lua | lua -f %s |
Scheme | guile -s %s |
D | dmd -run |
Erlang | escript %s |
JavaScript | ngs-js %s |
Haskell | runghc %s |
VBScript | cscript //nologo %s |
Prolog | pl -q -t halt -g main -s %s -- |
C | tcc %s |
Smalltalk | gst -Q %s -a |
Java | gcj %s --main=%s && ./a.out |
C# | mcs %s && mint %s.exe |
sh | .sh |
Ruby | .rb |
Perl | .pl |
Ch | .ch |
Python | .py |
PHP | .php |
Pike | .pike |
Scala | .scala |
Tcl | .tcl |
JudoScript | .judo |
Awk | .awk |
REXX | .rex or .rexx |
merd | .me |
OCaml | .ml |
E | .e |
CommonLisp | .lisp |
Lua | .lua |
Scheme | .scm |
D | .d |
Erlang | .erl |
JavaScript | .js |
Haskell | .hs |
VBScript | .vbs |
Prolog | .pl or .pro |
JScheme | .scm |
C | .c |
Smalltalk | .st |
Java | .java |
C# | .cs |
sh | sh |
Ruby | irb |
Perl | perl -de 1 |
Ch | ch |
Python | python |
PHP | php -a |
Pike | pike |
Scala | scala |
Tcl | tclsh |
merd | merd |
OCaml | ocaml |
E | rune |
CommonLisp | sbcl |
Lua | lua |
Scheme | umb-scheme |
Erlang | erl |
Haskell | ghci |
VBScript | cscript //X 1 |
Prolog | pl |
Smalltalk | gst |
sh | sh -x |
Ruby | ruby -r tracer |
Perl | perl -d:Trace |
Python | python -m trace -t |
Pike | pike -t1 |
REXX | rexx -ti %s |
CommonLisp | sbcl --noinform -eval '(trace)' |
Ruby | ruby -r debug %s |
Perl | perl -d %s |
Ch | _debug =1 parse foo.ch run |
Python | python -m pdb %s |
Scala | any jvm debugger |
OCaml | ocamldebug %s (nice go-back-time feature) |
CommonLisp | <builtin> |
D | see http://www.prowiki.org/wiki4d/wiki.cgi?DebugEnvironments |
Erlang | several available |
VBScript | cscript //X |
Prolog | use debug/0 |
C | gdb (arguments must be passed separately) |
Java | gdb |
Automatically generated from this file.