On 2013-6-13 14:07 , Poor Yorick wrote: > Here's another example from the patch. The original version looks like this: > > if {[catch {eval curl fetch $verboseflag {$source} {$tarpath}} error]} { > ... > } > > Taking a look at just the [eval] part: > > eval curl fetch $verboseflag {$source} {$tarpath} > > The curly brackets around {$source} and {$tarpath} are there to escape > substitution as Tcl prepares to invoke [eval], and this is not necessarily > incorrect, but there are some caveats. $verboseflag is resolved prior to the > invocation of [eval], but $source and $tarpath are passed as literal strings. > If $verboseflag is "yes", [eval] will get exactly five values as arguments: > > curl > > fetch > > yes > > $source > > $tarpath > > It will then concatenate these arguments into a script which it will then > pass to the interpreter: > > curl fetch yes $source $tarpath > > $source and $tarpath have not been resolved yet. As it prepares to execute > [curl], the the interpreter will resolve them, and [curl] will receive exactly > 4 arguments.
$verboseflag is actually either empty or "-v". The intent of the existing code is that curl will get only 3 arguments when $verboseflag is empty. If it weren't for this, the eval could be omitted entirely, right? So actually using list will change the behaviour by passing the empty string as an arg. - Josh _______________________________________________ macports-dev mailing list macports-dev@lists.macosforge.org https://lists.macosforge.org/mailman/listinfo/macports-dev