I have stumbled across this sintax while reviewing a code in Ruby. The code is:
if __FILE__ == $PROGRAM_NAME
__FILE__ always returns the path of the source file. It's not a variable so you can't assign value to it. Whether it returns a relative path or an absolute one depends on how you run the script.
$0 by default returns the command that boots the program (minus the path of ruby interpreter). For example, you have a script file
test.rb like this:
#!/usr/bin/env ruby puts __FILE__ puts $PROGRAM_NAME
If you run this script with
ruby test.rb, it prints
If you run the script with
ruby /path/to/test.rb, it prints
If you give the script an execution permission and run it with
./test.rb, it prints
$0 are real global variables, and you can change their values.
$0 are aliases to each other, so you change the value of either one, the value of the other will change accordingly. For example, you have a
test2.rb like this:
#!/usr/bin/env ruby $0 = 'Hello, world!' puts $0 puts $PROGRAM_NAME
Hello, world! Hello, world!