From WikiChip
Editing mirc/variables

Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.

This page supports semantic in-text annotations (e.g. "[[Is specified as::World Heritage Site]]") to build structured and queryable content provided by Semantic MediaWiki. For a comprehensive description on how to use annotations or the #ask parser function, please have a look at the getting started, in-text annotation, or inline queries help pages.

Latest revision Your text
Line 133: Line 133:
 
You can do one math operation with variable when setting a value.
 
You can do one math operation with variable when setting a value.
  
The operators supported are: '+' '-' '/' '*' '%' '^' where % is the modulus and ^ is power.
+
The operators supported are: '+' '-' '/' '*' '%' '^' where % id the modulus and ^ is power.
  
You must use a space around all 3 parameters and you must provide correct values, numbers can be float.  
+
You must use a space around all parameters and you must provide correct values, numbers can be float.  
  
If you don't respect the format, it will set the value as plain text, use -n or -p to override this behavior when dynamic content.
+
If you don't respect the format, it will set the value as plain text, use -n to override this behavior when dynamic content.
 
 
It also supports '&' as the logical-AND operator, but it's supported differently than how $and() handles inputs. Here, the output is valid only if the inputs are valid within the signed 32-bit range. If 1 input is valid and the other is >= 2^31, the result is zero. If 1 input is valid and the other is < -2^31, the result is always -2^31. Unlike how $and casts negative results into an integer in the range 2^31 <= n < 2^32, var can output negative numbers.
 
  
 
For Example:
 
For Example:
Line 287: Line 285:
  
  
'''Note''': If you have multiple dynamic variable to add together, you need to add another pair of $+ [ ... ] for each element or use [ [ $var(%var,1) ] ] :
+
'''Note''': If you have multiple dynamic variable to add together, you need to add another pair of $+ [ ... ] for each element:
  
 
   %static [ $+ [ %dynamic1 $+ [ %dynamic2 ] ] ]
 
   %static [ $+ [ %dynamic1 $+ [ %dynamic2 ] ] ]
   %static [ $+ [ %dynamic1 $+ [ %dynamic2 $+ [ %dynamic3 ] ] ] ]
+
   %static [ $+ [ %dynamic1 $+ [ %dynamic2 $+ [ %dynamic3 ] ] ]
  [ [ $var(static. $+ %dynamic1 $+ %dynamic2,1) ] ]
 
 
   etc..
 
   etc..
  
Line 315: Line 312:
 
Variables routines are a bit special because usually, the first argument given to a variables related command is a variable name, yet mIRC doesn't evaluate it.
 
Variables routines are a bit special because usually, the first argument given to a variables related command is a variable name, yet mIRC doesn't evaluate it.
  
Indeed if //echo %var would display its content, it's because %var is evaluated and then passed as the parameter to the /echo command. %Variable related commands are obviously not doing that otherwise the content of the variable or $null would be passed to the command. So mIRC, on purpose doesn't evaluate the variable name.
+
Indeed if //echo %var would display its content, it's because %var is evaluated and then passed as the parameter to the /echo command. //var %var is obviously not doing that otherwise the content of the variable or $null would be passed to it. So mIRC, on purpose doesn't evaluate the variable name, but it will fail to do so in some case, when the arguments are dynamically passed for example:
 
+
<syntaxhighlight lang="mirc">//set -u $+ %var %setting</syntaxhighlight>which should set %setting but won't, because it gets evaluated, you need to use % $+ setting here, /inc & /dec are most likely affected the same way.
=== Quirks in /var ===
 
 
 
If most commands cannot preserve spaces, /var can preserve spaces in all situations except if you provide a single trailing space:
 
<syntaxhighlight lang="mirc">//var -s %a $+($chr(32),a,$chr(32),$chr(32),b,$chr(32),$chr(32)),%b $+($chr(32),a,$chr(32),$chr(32),b,$chr(32)) | echo -a $len(%a) $len(%b)</syntaxhighlight>which is displaying 7 5 instead of 7 6 (there is one less space at the end, which is lost because it's a single trailing space), you can use the new -p switch to fix this.
 
 
 
/var is calling /set for every assignment, but every assignment in /var must start with a %
 
 
 
  //var -s %a,$+(%,b) 1
 
This will set the variable '%a,$+(%,b)' to the value 1, mIRC will consider your second assigment invalid and therefore it's just part of the current variable name.
 
 
 
  //var -s $+(%,b) 1,%a 2
 
Here the first assignment is ignored and %a is set to 2 properly, it it still possible to construct dynamic variable name by making the % the first character:
 
 
 
  //var -s % $+ b 1
 
 
 
And just like /set, /var will combine $+ with the variable name:
 
 
 
  //var -s %a $+ b value
 
Does set %ab, evaluation brackets are not required to properly set the variable %ab
 
 
 
/var is also strict on switches, you cannot pass switches dynamically:
 
 
 
  //var %var s | var -g $+ %var % $+ setting 1 | echo -ag > %var -- %setting
 
or
 
  //var %var s | var -g $+ %var %setting 1 | echo -ag > %var -- %setting
 
 
 
is not doing the trick
 
 
 
=== Quirks in /set /inc and /dec ===
 
 
 
/set /inc and /dec is less strict than /var, the assignment does not have to start with a %:
 
 
 
  //set -ls $+(%,a) 1
 
 
 
works correctly, however /set also allow dynamic switches, this leads to a new quirk for /set:
 
 
 
<syntaxhighlight lang="mirc">//var %var 1 | set -u $+ %var %setting</syntaxhighlight>should set %setting but won't, you can use % $+ setting to workaround this issue.
 
 
 
=== Quirks in /unset ===
 
 
 
/unset can unset a variable not starting with a variable name:
 
 
 
  //var %ab 1,%i 1 | unset -s $var(%ab*,%i) | echo -ag nope | unset -s $var(%ab*,$(%i))
 
  
/unset suffers from an evaluation problem, a common problem is using the same logic as /set, for example:
+
/unset also suffers from an evaluation problem, due to its ability to unset more than one variable on the same line, there is an issue when trying to unset a variable dynamically from a variable:
<syntaxhighlight lang="mirc">//var -s %a a,%b b,%ab,%a%b | unset -s %a $+ %b</syntaxhighlight>You might expect this to evaluate %b and stick its content to plain text "%a", just like in /set etc but it won't, mIRC won't evaluate %b at all, thinking it's a seperate variable name you want to unset as well, unsetting the wrong %a%b instead of %ab.
+
<syntaxhighlight lang="mirc">//var -s %a a,%b b,%ab,%a%b | unset -s %a $+ %b</syntaxhighlight>You might expect this to evaluate %b and stick its content to plain text "%a", just like in //var -s %a $+ %b, but it won't, mIRC won't evaluate %b at all, thinking it's a seperate variable name you want to unset as well, unsetting the wrong %a%b instead of %ab.
  
 
To workaround this problem, you must use evaluation brackets to force the evaluation:
 
To workaround this problem, you must use evaluation brackets to force the evaluation:
 
<syntaxhighlight lang="mirc">//var -s %a a,%b b,%ab,%a%b | unset -s %a $+ [ %b ]</syntaxhighlight>
 
<syntaxhighlight lang="mirc">//var -s %a a,%b b,%ab,%a%b | unset -s %a $+ [ %b ]</syntaxhighlight>
  
Another issue also occurs with variable inside identifier:
+
If most commands cannot preserve spaces, /var can preserve spaces in all situations except if you provide a single trailing space:
 
+
<syntaxhighlight lang="mirc">//var -s %a $+($chr(32),a,$chr(32),$chr(32),b,$chr(32),$chr(32)),%b $+($chr(32),a,$chr(32),$chr(32),b,$chr(32)) | echo -a $len(%a) $len(%b)</syntaxhighlight>which is displaying 7 5 instead of 7 6 (there is one less space at the end, which is lost because it's a single trailing space)
  //var %ab 1 | unset -s $+(%a,b)
 
 
 
This will correctly unset the variable %ab, %a is not evaluated inside $+(), you can use $() on the variable to force evaluation.
 
  
== Conclusion ==
 
 
Variables are a great resource to have at your fingertips within mIRC! As you've seen, they are very powerful, and yet don't require too much of a headache to understand :)
 
Variables are a great resource to have at your fingertips within mIRC! As you've seen, they are very powerful, and yet don't require too much of a headache to understand :)
  
 
[[Category:mIRC|variables]]
 
[[Category:mIRC|variables]]

Please note that all contributions to WikiChip may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see WikiChip:Copyrights for details). Do not submit copyrighted work without permission!

Cancel | Editing help (opens in new window)